【问题标题】:Remove line breaks from csv file created from excel从 excel 创建的 csv 文件中删除换行符
【发布时间】:2018-01-17 02:08:29
【问题描述】:

我编写了一个 vba 宏,可以将 excel 中的范围保存到 csv 中。 每条记录都应该在我的 csv 文件中占据 1 行。但是,这是我的 excel 文件中的一个单元格有换行符 (ALT + ENTER) 的情况,这导致记录分成 2 行。我想使用 powershell 脚本删除 csv 文件中的换行符(我的 powershell 版本是 V2)。

目前我从 csv 文件中删除双引号的方法是这样的:

(gc $fileloc) |% {$_ -replace '"',''}|set-content $fileloc

我搜索了互联网并尝试了以下代码来删除换行符,但它不起作用:

(gc $fileloc) |% {$_ -replace '`n',''}|set-content $fileloc

更新: 正如评论所说的示例数据可能会有所帮助,我会在这里制作一个以使我的问题更清楚:

我的 Excel 文件范围(管道分隔单元格):

A1| B1|C1|D1  (There is a line break at the beginning of B1)

A2|B2|C2|D2

我要导出为 CSV 的内容:

A1,B1,C1,D1
A2,B2,C2,D2

CSV 现在的样子:

A1,
B1,C1,D1
A2,B2,C2,D2

【问题讨论】:

    标签: powershell csv


    【解决方案1】:

    Powershell 会返回数组中的每一行,所以需要检查是否有空行:

    (gc $fileloc) |? { $_ -ne "" }|set-content $fileloc
    

    编辑:我可能误解了您的问题,excel 很可能也包含回车符。

    以下将删除回车符和换行符:

    (gc $fileloc) |% {($_ -replace '`r','') -replace "`n",''}|set-content $fileloc
    

    最后: 您的代码不会将其解析为 CSV,而只是将其解析为多行文本文件。这意味着它无法区分行尾和多行内容。

    您可以使用 Import-CSV(包含在 PSv2 中)将文件解析为 CSV,然后遍历每个 CSV 行以删除换行符。

    例如:(使用 Win10 无法访问 powershell v2)

    $csv = (Import-Csv $fileloc)
    foreach($row in $csv)
    {
      $row.MyField = $row.MyField -replace "`n"
    }
    $csv | Export-Csv $fileloc
    

    【讨论】:

    • 他说换行。我猜那里可能有多行数据,也许这些行不是空的?示例数据可能会有所帮助
    • 希望涵盖的足够多:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    相关资源
    最近更新 更多