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()