【问题标题】:Powershell Excel automatic Bloomberg add-inPowershell Excel 自动 Bloomberg 加载项
【发布时间】:2017-05-12 21:14:26
【问题描述】:

我在自动运行包含 Bloomberg 插件的 Excel 时遇到问题。

当我手动打开 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)

【问题讨论】:

  • 插件可能没有足够的时间来加载数据。您可以在关闭前等待(但很难说多长时间),或者更好的是,有一个计算“#N/A Requesting Data”单元格数量的公式,定期检查它直到它达到 0,然后关闭工作簿。
  • 也许我的等待循环有问题。我在上面的问题中添加了整个代码。也许你可以检查一下,如果它有意义。非常感谢! $timeout 是参数,我尝试将其设置为许多选项,例如 15 秒、30 秒等)

标签: excel powershell bloomberg


【解决方案1】:

这段代码对我有用:

    $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()

【讨论】:

    【解决方案2】:

    使用“New-Object -ComObject Excel.Application”打开excel时,完全没有加载bloomberg插件。您可以在 vba 环境中通过 alt+F11 仔细检查

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多