Создание нового рабочего листа Excel с помощью .Copy () и перемещение его в последнюю позицию

Я занимаюсь этим довольно давно,

Я хочу создать новый рабочий лист, скопировав другой. Это поместит новый лист перед копируемым. Затем я хочу переместить его в самый конец всех листов.

Цель состоит в том, чтобы рабочие листы назывались> сводка1> сводка2> сводка3 и т. Д. В таком порядке

Вот что у меня есть (простите за краткость)

$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, он ничего не делает, кроме .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)      
}
8
задан user175184 1 February 2012 в 10:58
поделиться