RSS ITサイト動画新着

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

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。

セル内改行を含む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に変えている

 

 

【PR】最近楽天で購入した商品

お手頃な値段で楽しめるが、なかなか真っすぐ飛ばせるようにならない。。。【レビュー投稿で1年保証】 X-COM スポーツディスク アルティメット フライング スタンダード ディスク 競技用 正規品 17 [...]

ipv6(クロスパス対応)だと接続するだけで使えるのは超絶便利。うちの場合は工事をしている間にipv6で繋がるようになりました。NEC PA-WX1500HP 無線LANルータ Aterm ブラック価 [...]

子供が児童館に置いてあったおもちゃでみて気に入って、欲しいとのことで購入。大人もぼーと見てられて、なかなか良い。【期間限定ポイントUP】日本製 【 オフィス弥生 】 プレイタイマー 1個 【 水車 タ [...]

Tips

Posted by admin