【发布时间】:2015-12-01 20:59:38
【问题描述】:
好的,我有 6 个 CSV,每个 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 的第二列填写了我想要的数据,作为我原始工作表的第二列。
感谢任何帮助。
【问题讨论】:
-
会完全取出
$workbook.saveas($fpath)$Excel.Quit()Remove-Variable -Name excel[gc]::collect()[gc]::WaitForPendingFinalizers(),直到我尝试添加所有6列,直到最后才做任何事情解决方案?
标签: excel csv powershell