(O+P)ut

OutPut Log by SE in SIer



(O+P)ut

OutPut Log by SE in SIer

ExcelファイルをCSVに変換する際の改行について

スポンサーリンク

事象

A B C
1 a1 b1
hoge
c1
2 a2 b2 c2

上のようなExcelファイルをCSVファイルとして出力すると、以下のようになる、

a1,"b1
hoge",c1
a2,b2,c2

注意点と対応策

セル内に改行が入っている場合は他の項目と異なる出方をします。
CSVファイルとして見た場合、ダブルクォーテーションが挿入の元で改行されてしまいます

これは、
ダブルクオーテーションが入っていることで改行が入っていることは認識可能
だからです。


もしダブルクオーテーションがなければ、元の表が以下のような場合でもCSVファイルとして同じような表記になってしまいます。

A B C
1 a1 b1
2 hoge c1
3 a2 b2 c2

プログラム等で扱おうとした際には少しやっかいなので対応する必要があります。

対応策1 CSVファイルを読み込む際に対応する

csv区切りで項目を扱う場合は、
先頭の文字が"の項目から
最後の文字列が"の項目があるまで
それを一つのセルとして扱うようにすれば対応できます。

例えばJavaであれば以下のように値が取得できるので条件分岐を組んで対応できます。

String items = line.split(","-1) //文字列lineをカンマ区切りで配列に
char c = items[i].charAt(1); //先頭文字取得
char c = items[i].charAt(str.length()-1); //最後の文字取得

対応策2 CSVファイルを出力する際に対応する

Excelファイルでは、セル内の改行は「Altキー + Enterキー」で記入しますが、
こちらの実体は「Ctrlキー + J」という制御コードになっています。*1

よって、Excelファイル内での置換にて

検索する文字列 「Ctrlキー + J」を入力(何も文字列が表示されない)
置換する文字列 任意(例えばスペースなど)

とすると、Excelファイルでは

A B C
1 a1 b1 hoge c1
2 a2 b2 c2

となるので、CSVファイルとしても

a1,b1 hoge,c1
a2,b2,c2

となります。

以上、ご参考ください。

*1:ちなみにメモ帳(notepad)でCtrl+Jを押すと改行できます。他のエディタであれば別のショートカットが割り当てられている場合もあります。