好的,我有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的第二栏填写了我想要的数据,作为原始表格的第二栏。
感谢任何帮助。
答案 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()