如何显示(或防止隐藏)从 PowerShell 创建的 Excel 工作表



我有一个脚本可以做很多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方法使它们可见或在保存之前滚动它们以显示?

您是只想在 UI 中选择它们,还是希望它们按顺序排列?如果只是想在UI中看到它们,

$ActiveWorksheet.Select()

如果您希望它们按顺序排列,请更改您的 Add((。

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

应该在右侧添加一个工作表。

您始终可以将工作表添加到数组中,然后对它们进行排序。这可能会解决您的问题。

让我知道这是否有帮助。

# 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)
}

最新更新