2016-11-04 312 views
0

我有一个包含彭博加载项的自动运行Excel的问题。Powershell Excel自动彭博加载项

当我手动打开Excel工作表时,彭博外接程序中的数据函数会自动运行。 但是当我打开PowerShell的同一张纸上,并保存,没有任何加载的数据

码 - 启动Excel并打开工作簿:

$xls = New-Object -ComObject Excel.Application 
$xls_workbook = $xls.Workbooks.Open("Market_data.xlsx") 
$xls_workbook.Activate() 

我试图通过这些方法来强制重新计算:

$xls.Calculate() 
$xls.CalculateFull() 
$xls.CalculateFullRebuild() 
$xls.Workbooks.Application.CalculateFullRebuild() 
$xls_workbook.Worksheets(1).Calculate() 

但没有任何工作。奇怪的是,正如我所提到的那样,手动打开Excel工作表会导致来自彭博社的数据自动加载。

您对布隆伯格插件自动化有一些经验吗?我想检查包含的.xla宏(BloombergUI.xla,BloombergHistory.xla),但它们受密码保护。 也许,是否有任何选项强制运行Excel中的所有加载项? 或者是否有像$ xls.Application.Run()这样的可以运行此加载项的调用?

谢谢

整个代码:

$xls = New-Object -ComObject Excel.Application 
$xls_workbook = $xls.Workbooks.Open("MarketData.xlsx") 
$xls_workbook.Activate() 

#calculation 
$xls.Calculate() 
#$xls_workbook.Aplication.Run("RefreshAllStaticData") - THIS RETURNS ERROR, THAT MACRO IS NOT AVAILABLE OR MACROS ARE DISABLED 

#my current option of waiting 
$internal_timeout = new-timespan -Seconds $timeout 
$sw = [diagnostics.stopwatch]::StartNew() 
while ($sw.elapsed -lt $internal_timeout){ 
} 

#maybe next option, how to wait until job finished 
#$job = Start-Job -ScriptBlock { 
    #docalculation 
#} 
#Wait-Job $job -Timeout $timeout | out-null 

$date = Get-Date -Format M_dd_yyyy 
$file_to_save = "MarketData_$date.xlsx" 
$xls_workbook.SaveAs($file_to_save) 

$xls_workbook.Close(); 
$xls.Quit() 
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($xls) 
+0

加载项可能没有足够的时间来加载数据。您可以在关闭之前等待(但多长时间难说),或者更好的方法是计算“#N/A请求数据”单元的数量的公式,并定期检查它,直到它达到0,然后关闭工作簿。 – assylias

+0

另请参阅:http://stackoverflow.com/questions/8669845/bloomberg-data-doesnt-populate-until-excel-vba-macro-finishes – assylias

+0

也许有我的等待循环的问题。我在上面的问题中添加了完整的代码。也许你可以检查,如果它有意义。非常感谢你! $超时是参数,我试图将其设置为许多选项,如15秒,30秒等) –

回答

0

彭博插件完全不加载,当您使用 “新对象-ComObject Excel.Application” 来打开的Excel。您可以在VBA环境

0

此代码为我工作翻番按alt + F11检查:

$xls = New-Object -ComObject Excel.Application 
    $xls.Workbooks.Open("C:\blp\API\Office Tools\BloombergUI.xla") 
    Write-Debug "$file_path$file_name$file_ext" 
    $xls_workbook = $xls.Workbooks.Open("$file_path$file_name$file_ext") 
    $xls_workbook.Activate() 
    $xls_workbook.Application.Run("RefreshAllWorkbooks") 
    $xls_workbook.Application.Run("RefreshAllStaticData") 
    $xls.CalculateFull() 

    Start-Sleep -s $timeout 


    $date = Get-Date -Format M_dd_yyyy 
    $file_to_upload = "$file_path$file_name$date$file_ext" 
    Write-Debug $file_to_upload 
    $xls_sheet = $xls_workbook.Sheets.Item(1) 
    $bl_value = $xls_sheet.Cells.Item(2,9).Text 
    Write-Host $bl_value 
    $xls_workbook.SaveAs($file_to_upload) 

    $xls_workbook.Close()