Как показать (или предотвратить скрытие) рабочие листы Excel, созданные из PowerShell - PullRequest
2 голосов
/ 18 октября 2019

У меня есть скрипт, который много обрабатывает в Excel. После создания двух таблиц я делаю еще три и заполняю их данными. Тем не менее, когда я открываю эту книгу, листы имеют порядок 5, 4, 3, 1, 2

Открыть электронную таблицу

$ExcelObject=New-Object -ComObject Excel.Application
$ExcelWorkbook=$ExcelObject.WorkBooks.Open("c:\Output.xlsx") 

Создать рабочий лист

$ActiveWorksheet=$ExcelWorkbook.WorkSheets.Add()
$ActiveWorksheet.Activate()
$ActiveWorksheet.Visible=$True
$ActiveWorksheet=$ExcelWorkbook.WorkSheets.item("$WorksheetName")

Похоже, что три последних рабочих листа не существуют, пока вы не нажмете стрелку навигации на левом рабочем листе три раза, чтобы они появились.

Если я записываю макрос, код VBA, который делает их видимыми, равен трем. случаи

ActiveWindow.ScrollWorkbookTabs Sheets:=-1

Существует перечисление xlFirst, но я не могу найти правильный синтаксис, чтобы это работало.

Почему они не отображаются? Есть ли способ Powershell сделать их видимыми или прокрутить их, чтобы показать перед сохранением?

Ответы [ 2 ]

2 голосов
/ 29 октября 2019

Вы хотите просто выбрать их в пользовательском интерфейсе или хотите, чтобы они были в порядке? Если вы просто хотите увидеть их в пользовательском интерфейсе,

$ActiveWorksheet.Select()

Если вы хотите, чтобы они были в порядке, измените Add ().

$ActiveWorksheet=$ExcelWorkbook.WorkSheets.Add([System.Reflection.Missing]::Value,$ExcelWorkbook.Worksheets.Item($ExcelWorkbook.Worksheets.count))

следует добавить рабочий лист с правой стороны.

0 голосов
/ 29 октября 2019

Вы всегда можете добавить листы в массив и затем отсортировать их. Это может решить вашу проблему.

Дайте мне знать, если это поможет.

# Create array and add sheet names.
$wsNames = New-Object System.Collections.ArrayList
foreach ($worksheet in $ExcelWorkbook.Worksheets) {
    $wsNames.Add($worksheet.Name)
}

# Order Worksheets
$wsNames.Sort()
for ($i = 0; $i -lt $wsNames.Count - 1; $i++) {
    $wsToMoveName = $wsNames[$i]
    $wsToMove = $ExcelWorkbook.Worksheets.Item($wsToMoveName)
    $wsAfter = $ExcelWorkbook.Worksheets.Item($i + 1)
    $wsToMove.Move($wsAfter)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...