Я работаю над автоматизацией нескольких отчетов Excel, используя PowerShell и Windows Task Scheduler.Для правильной загрузки Excel нужны две надстройки, чтобы все наши отчеты работали.В некоторых отчетах используется одна из этих надстроек, в других - обе.
Надстройки - PI Datalink от OsiSoft, а другая - надстройка, разработанная моей компанией (назовем ее Добавить-in2).PIDatalink - это надстройка COM, а надстройка 2 - надстройка Excel.
В настоящее время я могу полностью автоматизировать любые отчеты, использующие только PI Datalink.Когда открывается Excel, все загружается нормально, отчет генерируется и отправляется по электронной почте, как и планировалось.
Для надстройки 2, когда я вручную загружаю надстройку в Excel, я могу нормально запустить любой макрос, и он отображается влента под раскрывающимся меню надстроек.Но когда я открываю тот же файл с помощью сценария PowerShell, Add-in2 открывается в одиночном экземпляре Excel (как если бы я вручную открыл файл .xla), и реальный файл для обновления обычно загружается в отдельную книгу вместе с PIЗагружена надстройка Datalink COM.
На основании всего этого я знаю, что проблема заключается в открытии книги из PowerShell.Одна мысль, которую мне пришлось объяснить, это то, что я определяю Excel как COM-объект в моем сценарии PS.Так что, возможно, это заставляет Excel загружать только другие COM-объекты в рабочую книгу и разделяет надстройки Excel, но я не уверен, правильно ли это или как это изменить.Я также добавлю, что когда происходит это разделение, меню надстроек из Excel доступно только в книге, в которую загружен надстройка2.В книге надстроек COM невозможно загрузить меню надстроек вручную.
Что в моем сценарии вызывает загрузку Excel таким образом?
Несколько элементов дляссылка: 1.) Существует версия надстройки COM для надстроек2, но мы знаем, что она не работает с автоматизацией 2.) Надстройка 2 действительно старая, поэтому я уверен, что отчасти виноват.Он не очень хорошо работает с новыми версиями 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