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:

From http://theolddogscriptingblog.wordpress.com/2012/06/07/get-rid-of-the-excel-com-object-once-and-for-all/

$x = New-Object -com Excel.Application
$x.Visible = $True
Start-Sleep 5
$x.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($x)
Remove-Variable x

I z http://social.technet.microsoft.com/Forums/windowsserver/en-US/24e57b61-e792-40c1-8aff-b0a8205f48ab/updated-opened-excel-using-powershell?forum=winserverpowershell

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"

}

questionAnswers(4)

yourAnswerToTheQuestion