问:我想将 excel 转换为 csv,但 excel 在一个单元格中包含多行数据以及“;” 作为分隔符。所需的输出是带有“|”的 csv 文件 作为列的分隔符,但“,”作为同一单元格内数据的分隔符。我不能使用 excel,因此我使用的是“ImportExcel”模块。
输入 Excel 格式(问题末尾的附件):-
Row1# c1# c2# c3# c4#
Row2#
Row3#
Row4# HEADER1 HEADER2 HEADER3
Row5# 04.05 test & t test TEST
Row5# 04.06.01 test test TEST
Row5# 04.07.01 test test
Row5# 04.10.02 test & t
Row#代表excel的行,c#代表列,HEADER#代表列的标题。可以看出,第1-3行和excel的第一列是空的。第二列和第四列的文本是多行的,但在同一单元格中(同一行第 5 行)。
我尝试为每个对象导入 excel,然后用“,”替换换行符,最后使用(export-csv)用“|”将其导出到 csv 作为分隔符。
我制作的脚本如下:-
$test = Import-excel -NoHeader -StartRow(4) test.xlsx
$test | foreach-object {
if($_.HEADER1) {
$_.HEADER1 = $_.HEADER1.replace("\n",", ")
$_.HEADER1 = $_.HEADER1.replace("&","& ")
}
}
$test | Export-csv new-test.csv -Delimiter '|' -NoTypeInformation
输出我得到的 CSV 文件:-
Row1# c1# c2# c3#
Row2# HEADER1|HEADER2|HEADER3
Row3# 04.05 test & t
Row4# 04.06.01 test test
Row5# 04.07.01 test test
Row6# 04.10.02 test & t
Row7# test|TEST
Row8# TEST
可以看出,分隔符“;”后面的文字 在输入中转到另一列,并且多行仍被解析为单独的行。我希望将所有这些多行合并为一个,以“,”作为分隔符以及“';”之后的文本。分隔符。
所需的 CSV 文件:-
Row1# c1# c2#
Row2# HEADER1|HEADER2|HEADER3
Row3# 04.05 test & t,04.06.01 test test,04.07.01 test test,04.10.02 test & t|test|TEST,TEST
我已经尝试了很多来自 stackoverflow 的与此相关的问题,但由于某种原因,现有的解决方案似乎都不适合我。
附件是我要转换的示例 Excel 文件。测试.xlsx