Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

powershellでのExcelセル内改行を含むCSVファイルのセル内改行変換(条件限定)

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

セル内改行を含むExcelをCSVにエクスポートするとCRLFではなくLFが入るようです。そのためCSVに意図せぬ改行が入ってしまい、CSV変換したファイルから情報を抜きたい時などに邪魔になってしまいます。そこで、色々調べて「LF改行の前に特定の文字が入る場合」ですが、LF改行をスペースに変換して、かつShist_JISで出力してみました。
※LFだけで置き換えると、CRLFにも影響がでる。

元ファイル

"Excelで(LF)
改行","Excelで(LF)
改行","Excelで(LF)
改行"(CRLF)
"Excelで(LF)
改行","Excelで(LF)
改行","Excelで(LF)
改行"(CRLF)
"Excelで(LF)
改行","Excelで(LF)
改行","Excelで(LF)
改行"(CRLF)

スクリプト

 $TEST_Text = [System.IO.File]::ReadAllText("C:\Users\hoge\ドキュメント\Excel改行テスト.csv",[System.Text.Encoding]::GetEncoding("shift_jis")).Replace("で`n","で ")
[System.IO.File]::WriteAllText("C:\Users\hoge\ドキュメント\work\Excel改行テスト_after.csv", $TEST_Text,[System.Text.Encoding]::GetEncoding("shift_jis"))

結果

"Excelで 改行","Excelで 改行","Excelで 改行"(CRLF)
"Excelで 改行","Excelで 改行","Excelで 改行"(CRLF)
"Excelで 改行","Excelで 改行","Excelで 改行"(CRLF)

ちょっと改良してみる

$TEST_Text = [System.IO.File]::ReadAllText("C:\Users\hoge\ドキュメント\Excel改行テスト.csv",[System.Text.Encoding]::GetEncoding("shift_jis")) -Replace("[^\x00-\x7F]`n","あ ")
[System.IO.File]::WriteAllText("C:\Users\hoge\ドキュメント\Excel改行テスト_after.csv", $TEST_Text,[System.Text.Encoding]::GetEncoding("shift_jis"))

[^\x00-\x7F]
はASCII文字ではない、つまり全角1文字に一致する。なので、全角1文字LF改行のものを「あスペース」に置換する。なのでLFの前の文字は全角であれば何でもよいが置換後の全角文字は決め打ちになってしまう。
正規表現を使えるようにするため、.Replaceではなく、-Replaceに変えている

 

 

タイトルとURLをコピーしました