使用Powershell将整个列从一个CSV文件复制到另一个CSV文件

时间:2015-04-20 13:21:50

标签: excel powershell csv

我有两个CSV文件:File1.csv有一列有4000多行。 File2.csv有200列,内容超过10000行。我想在file1.csv中添加一列作为File2.csv上的附加列。我可以将它添加到现有文件的最后(最右边)。我在网上找到了几个选项,但没有一个是按照愿望运作的。我可以使用Input-CSV cmdlet完成它并添加一个属性,但执行时间超过约1小时。有没有办法做到这一点,而无需将CSV内容转换为PSobjects?我过去使用过Get-Content和Set-Content,但是会将一个文件追加到另一个文件的底部。有什么方法可以做类似的事情但附加到现有文件的右边?

这段代码让我更接近我需要的东西。这个问题是Excel不保存或关闭。关于如何通过修复下面的代码或更简单/更有效的方法来解决这个问题的任何想法?

$source = "C:\Users\Desktop\Script_Development\04-16-2015\Bit.csv"
$dest =  "C:\Users\Desktop\Script_Development\04-16-2015\MergedwithHeader_04-16-2015.csv"
$Excel = New-Object -ComObject Excel.Application 
$Excel.visible = $false
$Workbooksource = $excel.Workbooks.open($source) 
$Worksheetsource = $Workbooksource.WorkSheets.item("Bit") 
$Worksheetsource.activate()  
$range = $Worksheetsource.Range("A1").EntireColumn 
$range.Copy() | out-null 

$Workbookdest = $excel.Workbooks.open($dest) 
$Worksheetdest = $Workbookdest.Worksheets.item("MergedwithHeader_04-16-2015") 
$Range = $Worksheetdest.Range("FT1") 
$Worksheetdest.Paste($range)  
$Workbookdest.SaveAs("C:\Users\Desktop\Script_Development\04-16-2015\MergedwithHeader_04-16-2015.xls")
$Excel.quit()

1 个答案:

答案 0 :(得分:0)

以下代码将遍历文件的行。您可以使用它将每行读入ArrayList。

$FileData = Get-Content "$Filename"
foreach ($i in $FileData)
{
    DoSomethingWithLine($i)
}

然后循环浏览另一个文件,并将每一行与存储在ArrayList中的行组合,将其与必要的逗号和引号连接,然后使用Add-Content将每行附加到新文件。< / p>

还有许多其他更复杂的方法可以做到这一点。