【问题标题】:Editing CSV File - Deleting Entire row based on condition VIA Powershell编辑 CSV 文件 - 根据条件删除整行 VIA Powershell
【发布时间】:2015-04-24 15:13:01
【问题描述】:

当 A 列的值或 C 列的值为空时,需要删除 excel 文件 (.CSV) 的整行。

这是我目前所拥有的:

$ab = New-Object -comobject excel.application 
$bc = $ab.Workbooks.Open("C:\Users\abc\Desktop\New.csv")
$cd = $bc.Worksheets.Item(1)
$used = $cd.usedRange 
$lastCellCnt = $used.SpecialCells($xlCellTypeLastCell) 
$row = $lastCell.row

从上面的代码中我得到了记录的数量,正在考虑应用一个循环来删除记录。 例如:

if A2 == null or C2 == null then delete entire row

【问题讨论】:

    标签: excel powershell


    【解决方案1】:

    您当前正尝试使用 Excel COM 对象执行此操作,但您的输入文件似乎是 CSV。如果是这种情况,您不需要使用New-Object -comobject excel.application

    在 PowerShell 中使用 Import-CSV 是处理这些问题的首选方式。你没有提到文件的结构,但我们假设你有标题。如果不是,可以稍微调整一下。

    $path = "C:\Users\abc\Desktop\New.csv"
    $scrubbed = Import-CSV $path | Where-Object{$_.name -and $_.address}
    $scrubbed | Export-Csv -NoTypeInformation $path
    

    假设 A 和 C 有标题 NameAddress 这将只允许这两个值都包含数据的行。在 PowerShell 中,非零长度字符串的计算结果为 True,这就是 Where 可以利用这一点变得简洁的方式。您也可以将该子句读作($_.name -ne '') -and ($_.address -ne '')

    将结果捕获到临时变量中,然后使用合作伙伴 cmdlet Export-CSV 将编辑后的更改写回同一文件。

    【讨论】:

    • 哇,...效果很好,也感谢您的详细解释。
    【解决方案2】:

    我不认为我会为这项任务启动 Excel;我发现 Office COM 应用程序至少可以说有点麻烦。

    如果您从 .csv 开始,为什么不使用 Import-Csv 创建数据的 PowerShell 数组?

    考虑 .\test.csv:

    ColumnA,ColumnB,ColumnC
    1A,1B,1C
    ,2B,2C
    3A,,3C
    4A,4B,
    5A,5B,5C
    

    Import-Csv .\test.csv | ft -a 将像这样导入:

    ColumnA ColumnB ColumnC
    ------- ------- -------
    1A      1B      1C
            2B      2C
    3A              3C
    4A      4B
    5A      5B      5C
    

    您可以在导入时过滤是否存在 A 和 C 列(确保两者都不为空):

    Import-Csv .\test.csv | Where-Object {$_.ColumnA -and $_.ColumnC} | ft -a
    
    ColumnA ColumnB ColumnC
    ------- ------- -------
    1A      1B      1C
    3A              3C
    5A      5B      5C
    

    将其分配给一个变量,然后将其写入一个新文件:

    $NewVar = Import-Csv .\test.csv | Where-Object {$_.ColumnA -and $_.ColumnC}
    
    $NewVar | Export-Csv -NoTypeInformation .\newtest.csv
    

    【讨论】:

      猜你喜欢
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 2021-02-21
      • 2018-03-03
      相关资源
      最近更新 更多