我有一个脚本可以做很多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)
}