从excel

时间:2018-01-17 02:08:29

标签: powershell csv

我编写了一个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

1 个答案:

答案 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