我编写了一个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
答案 0 :(得分:0)
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