2016-11-04 5 views
0

Bloomberg 추가 기능이 포함 된 Excel 자동 실행에 문제가 있습니다.Powershell Excel 자동 Bloomberg 추가 기능

Excel 워크 시트를 수동으로 열면 Bloomberg 추가 기능의 데이터 기능이 자동으로 실행됩니다. 하지만 파워 쉘과 같은 시트를 열고 저장할 때,로드 된 데이터가 없습니다

코드 - 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() 

하지만 아무 것도 효과가 없습니다. Storm. 왜냐하면 내가 언급했듯이 Excel 시트를 수동으로 열면 Bloomberg의 데이터가 자동으로로드되기 때문입니다.

블룸버그 추가 기능 자동화에 대한 경험이 있습니까? 포함 된 .xla 매크로도 확인하고 싶었지만 (BloombergUI.xla, BloombergHistory.xla) 비밀번호로 보호되어 있습니다. Excel에서 모든 추가 기능을 강제로 실행할 수있는 옵션이 있습니까? 또는이 추가 기능을 실행할 수있는 $ xls.Application.Run()과 같은 호출이 있습니까?

당신에게

전체 코드를 감사 : Excel을 열고 "새 객체 -ComObject이 Excel.Application"을 사용할 때 블룸버그 추가 기능이 전혀로드되지

$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

내 대기 루프의 문제가있을 수 있습니다. 위 질문에 전체 코드를 추가했습니다. 어쩌면 당신은 그것이 의미가 있는지를 확인할 수 있습니다. 고마워요! $ timeout은 매개 변수이며 15 초, 30 초 등과 같이 많은 옵션을 설정하려고했습니다. –

답변

0

. 당신은이 코드는 나를 위해 일한 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()