通过.Copy()创建一个新的Excel工作表并将其移动到最后一个位置

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)