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