Передать лист Excel в качестве аргумента другому сценарию - PullRequest
1 голос
/ 11 февраля 2020

Можно ли открыть лист Excel в одном скрипте Powershell, а затем передать лист экземпляр другому скрипту?

Что я пробовал:

Скрипт 1 (основной скрипт)

$Excel = New-Object -comobject Excel.Application
$Workbook = $Excel.Workbooks.Open("$PSScriptRoot\MyExcelFile.xlsx")
$WorksheetMagic = $Workbook.worksheets | Where-Object {$_.Name -eq "MY TAB NAME"}

& .\$DynamicScriptNr2 -OptionalParam $WorksheetMagic

Скрипт 2

param (
    [Worksheet] $WorksheetMagic
)

При запуске появляется следующая ошибка:

Unable to find type [Worksheet].

Я также пробовал другие типы, такие как Excel.Worksheet, Excel.Application.Worksheet и Object. Ни одна из этих работ - ну, Object вид работ, пока я не попытаюсь использовать параметр переменная , тогда он не будет работать.

Может ли это быть сделано?

Единственный другой вариант, который я вижу, заключается в том, что мне нужно сохранить и закрыть Excel в первом сценарии, прежде чем вызывать второй сценарий и затем открывать его там. Я бы хотел этого избежать, так как после завершения сценариев будет сделано МНОГИЕ вызовы, и его открытие и закрытие все время будет медленным.

Решение

Играя с решением, предоставленным t1meless, я обнаружил, что переменные в первом скрипте доступны во втором скрипте, без необходимости передавать какие-либо параметры вообще ... не то поведение, которое я ожидал.

1 Ответ

0 голосов
/ 11 февраля 2020

Попробуйте вообще не указывать тип. Это работает для меня:

Сценарий 1:

$Excel = New-Object -ComObject Excel.Application
$Workbook = $Excel.Workbooks.Open("$PSScriptRoot\MyExcelFile.xlsx")
$WorksheetMagic = $WorkBook.Sheets.Item("MY TAB NAME")
& .\$DynamicScriptNr2 -WorksheetMagic $WorksheetMagic

Сценарий 2:

param (
    $WorksheetMagic
)

$WorksheetMagic.Range("A1").Text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...