byłem na to za jakiś czas,Tworzenie nowego arkusza programu Excel za pośrednictwem .Copy() i przesuwając go do ostatniej pozycji
Chcę utworzyć nowy arkusz przez skopiowanie innego. Spowoduje to umieszczenie nowego arkusza przed skopiowaniem arkusza. Następnie chcę przenieść go na sam koniec wszystkich arkuszy.
Celem jest, aby arkusze zwanych> summary1> summary2> summary3 .. itp w tej kolejności
Oto co mam (pretekst zwięzłość)
$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))
}
To działa dla pierwszego arkusza, zmienia nazwę arkusza, a następnie przesuwa go do końca, ale za każdym razem, gdy osiągnie metodę .Move, nie robi niczego poza .Activate() oryginalnym arkuszem "Summary".
Nie mam pojęcia, jak wytłumaczyć to zachowanie .. Dziękuję z góry.
Edit. Zmieniono $ wb.Worksheets.Item ("Podsumowanie") Przenieś do $ wb.Worksheets.Item ($ name) .Doprowadzić
Edit:
Oto rozwiązanie:
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)
}
Witamy StackOverflow, należy pamiętać, że można odpowiedzieć Ci własne pytanie, a nie tylko jego edycji (to nawet [wysoce zalecane] (http: //meta.stackexchange.com/questions/17463/can-i-answer-my-own-questions-even-those-where-i-knew-the -answer-before-asking)) i zaakceptuj to. W ten sposób możesz podzielić się swoją wiedzą ze społecznością i rodzaju * zamknąć * pytanie - dzięki dla społeczności. – JMax