我已经做了相当长时间了,
我想通过复制另一个工作表来创建一个新的工作表。这将把新工作表放在被复制的工作表之前。然后,我想将它移到所有工作表的最后。
目标是按照顺序命名工作表> summary1 > summary2 > summary3等等
以下是我的代码(请见谅简洁)
$ex = New-Object -ComObject Excel.Application
$ex.Visible = $true
$wb = $ex.Workbooks.Add()
for ($i = 1; $i -le 3; $i++)
{
$wb.Worksheets.Item(2).Copy($wb.Worksheets.Item(2))
$newSheet = $wb.Worksheets.Item(2)
$newSheet.Activate()
$name = "Summary$i"
$newSheet.Name = $name
$wb.Worksheets.Item($name).Move($wb.Worksheets.Item($i + 1))
}
它可以运作在第一个表格上,它能够将表格重命名并将其移动到末尾,但是之后每次它到达".Move"方法时,它不执行任何操作,只激活原始的“Summary”表格。
我不知道如何解释这种行为。非常感谢您的帮助。
编辑:将$wb.Worksheets.Item("Summary").Move更改为$wb.Worksheets.Item($name).Move
编辑:
以下是解决方案:
for ($i = 1; $i -le 3; $i++)
{
$wb.Worksheets.Item(2).Copy($wb.Worksheets.Item(2))
$newSheet = $wb.Worksheets.Item(2)
$newSheet.Activate()
$name = "Summary$i"
$newSheet.Name = $name
$lastSheet = $wb.WorkSheets.Item($wb.WorkSheets.Count)
$newSheet.Move([System.Reflection.Missing]::Value, $lastSheet)
}