代码的问题在于您指定了
-NoHeader
参数。
你必须说明
`n
而不是
\n
作为换行符
Replace()
方法。
$test = Import-Excel test.xlsx -StartRow 4
$test | ForEach-Object {
if($_.HEADER1) {
$_.HEADER1 = $_.HEADER1.Replace("`n", ", ")
$_.HEADER1 = $_.HEADER1.Replace("&", "&")
}
if($_.HEADER3) {
$_.HEADER3 = $_.HEADER3.Replace("`n", ", ")
}
}
$test | Export-Csv new-test.csv -Delimiter "|" -NoTypeInformation
输出:
"HEADER1"|"HEADER2"|"HEADER3"
"04.05 test & t, 04.06.01 test test, 04.10.02 test & t, 04.07.01 test test"|"test"|"TEST, TEST"
使用
$obj.psobject.Properties
属性替换所有属性的值。
# import
$data = Import-Excel test.xlsx -StartRow 4
# replace the values of all properties
$data | ForEach-Object { $_.psobject.Properties } | Where-Object Value -is string |
ForEach-Object { $_.Value = $_.Value.Replace("`n",", ").Replace("&", "&") }
# export
$data | Export-Csv new-test.csv -Delimiter "|" -NoTypeInformation
如果要插入空行和列,请在转换后添加它们。
ConvertTo-CSV
.
$data | ConvertTo-Csv -Delimiter "|" -NoTypeInformation | ForEach-Object { "" } { "|" + $_ } | Out-File new-test.csv
输出:
|"HEADER1"|"HEADER2"|"HEADER3"
|"04.05 test & t, 04.06.01 test test, 04.10.02 test & t, 04.07.01 test test"|"test"|"TEST, TEST"
如果标题重复,则
-报头
参数是必需的。并在保存前删除自动附加的标题。
$data = Import-Excel test.xlsx -StartRow 4 -StartColumn 2 -NoHeader
$data | foreach { $_.psobject.Properties } | where Value -is string | foreach { $_.Value = $_.Value.Replace("`n",", ").Replace("&", "&") }
$data | ConvertTo-Csv -Delimiter "|" -NoTypeInformation | Select-Object -Skip 1 | Out-File new-test.csv