Я занимаюсь этим довольно давно,
Я хочу создать новый рабочий лист, скопировав другой. Это поместит новый лист перед копируемым. Затем я хочу переместить его в самый конец всех листов.
Цель состоит в том, чтобы рабочие листы назывались> сводка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)
}