事象
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 |
プログラム等で扱おうとした際には少しやっかいなので対応する必要があります。
以下、2案用意しました。
対応策1 CSVファイルを読み込む際に対応する
csv区切りで項目を扱う場合、先頭の文字が"の項目から最後の文字列が"の項目を1セルとして扱うようにします。
例えば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」という制御コードです。(ちなみにWindows標準のメモ帳でCtrl+Jを押すと確かに改行できる)
よって、Excelファイル内での置換にて
検索する文字列 「Ctrlキー + J」を入力(何も文字列が表示されない)
置換する文字列 任意(例えばスペースなど)
を行うとExcelシートは
A | B | C | |
---|---|---|---|
1 | a1 | b1 hoge | c1 |
2 | a2 | b2 | c2 |
となるので、CSVファイルとしても
a1,b1 hoge,c1 a2,b2,c2
行数が同じように値が格納されています。。
以上、ご参考ください。