【问题标题】:Copying an entire column from one CSV file to another using Powershell使用 Powershell 将整个列从一个 CSV 文件复制到另一个
【发布时间】:2015-04-20 13:21:50
【问题描述】:

我有两个 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()

【问题讨论】:

    标签: excel powershell csv


    【解决方案1】:

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

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

    然后您遍历另一个文件,并将每一行与存储在 ArrayList 中的一行合并,将其与必要的逗号和引号连接起来,然后使用 Add-Content 将每一行附加到一个新文件中。

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

    【讨论】:

    • 我能够修复我的初始脚本。但这仍然很有帮助,它给了我更多的想法。谢谢。
    猜你喜欢
    • 2021-02-26
    • 2015-11-21
    • 2022-01-04
    • 1970-01-01
    • 2018-09-29
    • 2021-06-29
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    相关资源
    最近更新 更多