我正在使用PowerShell和Windows任务计划程序自动执行一些Excel报告 . 有两个加载项,我需要Excel正确加载,以便我们的所有报告都能正常工作 . 某些报告使用其中一个加载项,其他报告使用这两个加载项 .

加载项是OsiSoft的PI Datalink,另一个是我公司设计的加载项(我们称之为Add-in2) . PIDatalink是一个COM加载项,Add-in2是一个Excel加载项 .

目前,我能够完全自动化任何仅使用PI Datalink的报告 . 当Excel打开时,一切都正常加载,报告会按计划生成并发送电子邮件 .

对于Add-in2,当我手动将加载项加载到Excel中时,我可以正常运行任何宏,并在“加载项”下拉菜单下的功能区中显示 . 但是,当我使用PowerShell脚本打开相同的文件时,Add-in2在Excel的单独实例中打开(就像我手动打开.xla文件一样)和实际文件通常在单独的工作簿中与PI一起更新负载已加载Datalink COM加载项 .

基于这一切,我知道问题是从PowerShell打开工作簿 . 有人认为我必须解释这个问题,我在我的PS脚本中将Excel定义为COM对象 . 所以也许强制Excel只将其他COM对象加载到工作簿中并分离Excel加载项,但我不确定这是否正确或如何更改它 . 我还将补充说,当发生此拆分时,Excel中的加载项菜单仅在加载了Add-in2的工作簿中可用 . 在COM加载项工作簿中,无法手动加载加载项菜单 .

我的脚本中有什么导致Excel以这种方式加载?

一些参考项目:1 . )有一个COM加载项版本的Add-in2,但是我们知道它不适用于自动化2.)Add-in2真的很旧所以我确信这部分是惹的祸 . 它不适用于较新版本的Excel,但我们已经能够使它工作 . 3.)PS版本5.1,Windows 10,Excel 2016 .

这是我的脚本的相关部分:

$FilePath = "Filepath"

    # Create an Object Excel.Application using Com interface
    $objExcel = New-Object -ComObject Excel.Application

    # Enable the 'visible' property so the document opens in excel
    $objExcel.Visible = $true

    # Open the Excel file and save it in $WorkBook
    $WorkBook = $objExcel.Workbooks.Open($FilePath)

    # Run desired macros in Excel Sheet
    $objExcel.Run('Macro')

    #Close Workbook
    $WorkBook.Close($false)
    $objExcel.Quit()

    #Hide and kill Excel
    $objExcel.Visible = $false