PowerShell错误创buildXLSX

好的,我有6个CSV,每个包含一列。 对于这个例子,来自第一个CSV的数据被用来创build初始文档,并且每个之后都试图保存到文档中。

#ID $csvFile = "$path\ID.csv" $fpath = $Filename $processes = Import-Csv -Path $csvFile $Excel = New-Object -ComObject excel.application $Excel.visible = $false $workbook = $Excel.workbooks.add() $excel.cells.item(1,1) = "ID" $i = 2 foreach($process in $processes) { $excel.cells.item($i,1) = $process.ID $i++ } #end foreach process $workbook.saveas($fpath) $Excel.Quit() Remove-Variable -Name excel [gc]::collect() [gc]::WaitForPendingFinalizers() #SRP $csvFile = "$path\SRP.csv" $processes = Import-Csv -Path $csvFile $Excel = New-Object -ComObject excel.application $Excel.visible = $false $workbook = $Excel.workbooks.add() $excel.cells.item(1,2) = "SRP" $i = 2 foreach($process in $processes) { $excel.cells.item($i,2) = $process.SRP $i++ } #end foreach process $workbook.save($fpath) $Excel.Quit() Remove-Variable -Name excel [gc]::collect() [gc]::WaitForPendingFinalizers() 

当我到第二个( #SRP部分)的保存行时,出现以下错误:

 Cannot find an overload for "Save" and the argument count: "1". At D:\UserAdminScripts\0_Powershell_Test_Scripts\Scripts_For_Lisa\NED Stuff\NED_Reports.ps1:130 char:15 + $workbook.save <<<< ($fpath) + CategoryInfo : NotSpecified: (:) [], MethodException + FullyQualifiedErrorId : MethodCountCouldNotFindBest 

如果让脚本在错误之后运行,每列都会得到相同的结果。

我知道这个脚本是不干净的,因为我不需要closures并重新打开每个运行的Excel,但我从http://blogs.technet.com/b/heyscriptingguy/archive/2010/屠杀这个脚本09/09 / copy-csv-columns-to-an-excel-spreadsheet-by-using-powershell.aspx 。 saveas在第一次尝试中正常工作,只是save导致错误。

我发现,当我打破脚本,我popup一个确认是否要更改Book2.xlsx。 我说是的,我检查和Book2有第二列填写我想要的数据作为我原来的工作表第二列。

任何帮助表示赞赏。

使用Get-Member查看$Workbook对象:

 Save Method void Save () 

Save()方法不接受任何参数,并且无法解决如何处理该方法和文件名参数。

您退出#ID部分中的Excel应用程序(因此closures该文件),因此您需要重新打开该文件访问该工作簿并尝试写入之前。

那么,看起来我回答了我自己的问题,因为ConanW的灵感实际上就是批判性地思考。 我的问题的答案如下:

 #ID $csvFile = "$path\ID.csv" $fpath = $Filename $processes = Import-Csv -Path $csvFile $Excel = New-Object -ComObject excel.application $Excel.visible = $false $workbook = $Excel.workbooks.add() $excel.cells.item(1,1) = "ID" $i = 2 foreach($process in $processes) { $excel.cells.item($i,1) = $process.ID $i++ } #end foreach process #SRP $csvFile = "$path\SRP.csv" $processes = Import-Csv -Path $csvFile $excel.cells.item(1,2) = "SRP" $i = 2 foreach($process in $processes) { $excel.cells.item($i,2) = $process.SRP $i++ } #end foreach process $workbook.saveas($fpath) $Excel.Quit() Remove-Variable -Name excel [gc]::collect() [gc]::WaitForPendingFinalizers()