2016-11-04 8 views
0

У меня проблема с автоматическим запуском Excel с добавлением Bloomberg.Powershell Excel автоматический Bloomberg надстройка

Когда я вручную открываю рабочий лист Excel, функции данных из надстройки Bloomberg автоматически запускаются. Но когда я открываю то же лист с 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 приводит к тому, что данные из Bloomberg загружаются автоматически.

Есть ли у вас опыт работы с этой надстройкой надстройки Bloomberg? Я хотел проверить также макросы .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 Requesting Data», периодически проверять ее до тех пор, пока она не достигнет 0, а затем закройте книгу. – assylias

+0

См. Также: http://stackoverflow.com/questions/8669845/bloomberg-data-doesnt-populate-until-excel-vba-macro-finishes – assylias

+0

Возможно, проблема в моем цикле ожидания. Я добавил весь код к моему Вопросу выше. Может быть, вы можете проверить, если это имеет смысл. Большое спасибо! $ timeout является параметром, и я попытался установить его на многие параметры, такие как 15 секунд, 30 секунд и т. д.). –

ответ

0

Блумберга надстройка не загружается вообще, когда вы используете "New-Object -ComObject Excel.Application", чтобы открыть Excel. Вы можете удвоить чек по Alt + F11 в Vba среде

0

Этот код работал для меня:

$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() 
Смежные вопросы