use*_*184 8 excel powershell position copy move
我已经有一段时间了,
我想通过复制另一个来创建一个新的工作表.这会在复制工作表之前放置新工作表.然后我想将它移动到所有工作表的最后.
目的是按顺序将工作表称为> 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))
}
Run Code Online (Sandbox Code Playgroud)
它适用于第一张工作表,它重命名工作表然后将其移动到最后但是在每次它到达.Move方法之后它除了.Activate()原始的"摘要"工作表之外什么都不做.
我不知道如何解释这种行为..谢谢你提前.
编辑:更改了$ wb.Worksheets.Item("摘要").移动到$ 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)
}
Run Code Online (Sandbox Code Playgroud)
小智 3
标记为社区,因为它来自上述问题。
这是解决方案:
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)
}
Run Code Online (Sandbox Code Playgroud)