Jak otworzyć; Zapisz jako; następnie Zamknij skoroszyt programu Excel 2013 (z obsługą makr) z PowerShell4
Wyszukiwanie w powyższych operacjach Com daje linki datowane na rok 2009, a nawet wcześniej. Być może to się nie zmieniło, ale wpadłem na błędy, w których „jest używany przez inny proces”. - mimo że żadna aplikacja Excel nie jest otwarta na moim pulpicie. Muszę zrestartować komputer, aby wznowić.
Żeby było jasne - próbuję otworzyć istniejący plik; natychmiastSaveAs()
(tyle działa), dodaj arkusz,Save(); Close()
- a następnie, co ważne, powtórz ten cykl. W efekcie tworzę kilkadziesiąt nowych arkuszy w pętli, która wykonuje powyższy „Open Master”;SaveAs()
; Edytuj rzeczy; Zapisać; Blisko;
Z przykładów, które widziałem, nie jest typowy przepływ pracy w PowerShell. Wklejony na samym dole jest moim prowizorycznym skryptem - dość szorstkim i niekompletnym, ale wszystko się otwiera, czego potrzebują do otwarcia i dodania arkusza również działa - dopóki nie wiem, że mam właściwy sposób na czyste zamknięcie rzeczy Nie martwię się o iteracje .
Znalazłem kilka przykładów zamknięcia adresu:
$x = New-Object -com Excel.Application
$x.Visible = $True
Start-Sleep 5
$x.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($x)
Remove-Variable x
Set-ItemProperty $path -name IsReadOnly -value $false
$Excel.ActiveWorkBook.Save()
$openfile.Close()
$openfile = $null
$Excel.Quit()
$Excel = $null
[GC]::Collect()
<>
function MakeNewBook($theWeek, $AffID){
$ExcelFile = "C:\csv\InvoiceTemplate.xlsm"
$Excel = New-Object -Com Excel.Application
$Excel.Visible = $True
$Workbook = $Excel.Workbooks.Open($ExcelFile)
$theWeek = $theWeek -replace "C:\\csv\\", ""
$theWeek = $theWeek -replace "\.csv", ""
$theWeek = "c:\csv\Invoices\" +$AffID +"_" + $theWeek + ".xlsm"
$SummaryWorksheet = $Workbook.worksheets.Item(1)
$Workbook.SaveAs($theWeek)
return $Excel
}
function MakeNewSheet($myBook, $ClassID){
$SheetName = "w"+$ClassID
#$Excel = New-Object -Com Excel.Application
#$Excel.Visible = $True
$wSheet = $myBook.WorkSheets.Add()
}
function SaveSheet ($myExcel)
{
#$WorkBook.EntireColumn.AutoFit()
#Set-ItemProperty $path -name IsReadOnly -value $false
$myExcel.ActiveWorkBook.Save()
$openfile= $myExcel.ActiveWorkBook
$openfile.Close()
$openfile = $null
$myExcel.Quit()
$myExcel = $null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($myExcel)
Remove-Variable $myExcel
[GC]::Collect()
}
$theWeek = "C:\csv\wkStart2013-11-04.csv"
$x = Import-Csv $theWeek
foreach ($xLine in $x){
if ($x[0]){
$AffID = $x[1].idAffiliate
$myExcel = MakeNewBook $theWeek $x[1].idAffiliate
$ClassID = $x[1].idClass
MakeNewSheet $myExcel $ClassID
continue
}
SaveSheet($myExcel)
$AffID = $_.$AffID
$wID = $xLine.idClass
#MakeNewSheet($wID)
Echo "$wID"
}