PowerShell错误创建XLSX

时间:2015-12-01 20:59:39

标签: excel csv powershell

好的,我有6个CSV,每个包含一列。对于此示例,第一个CSV中的数据用于创建初始文档,之后每个数据都尝试保存到文档中。

#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

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

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

我发现当我打破脚本时,我会弹出一个确认是否要对Book2.xlsx进行更改的弹出窗口。我说是的,我检查了,Book2的第二栏填写了我想要的数据,作为原始表格的第二栏。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

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

Save                             Method                void Save ()

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

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

答案 1 :(得分:0)

好吧,看起来我回答了我自己的问题,因为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()