PowerShell将Excel加载项拆分为单独的工作簿

时间:2018-05-15 02:10:12

标签: excel vba excel-vba powershell

我正致力于使用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

0 个答案:

没有答案