我有一個包含彭博加載項的自動運行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)
加載項可能沒有足夠的時間來加載數據。您可以在關閉之前等待(但多長時間難說),或者更好的方法是計算「#N/A請求數據」單元的數量的公式,並定期檢查它,直到它達到0,然後關閉工作簿。 – assylias
另請參閱:http://stackoverflow.com/questions/8669845/bloomberg-data-doesnt-populate-until-excel-vba-macro-finishes – assylias
也許有我的等待循環的問題。我在上面的問題中添加了完整的代碼。也許你可以檢查,如果它有意義。非常感謝你! $超時是參數,我試圖將其設置爲許多選項,如15秒,30秒等) –