忍者ブログ
萌え指向プログラミング言語「萌香」のBlog
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Microsoft Excelで使用するためのCSV形式のファイルを作成しようとしたらはまりました。

現象

改行を含んだデータを1セルに入れるため、 ダブルクォーテーションで囲んだのですが、 中に入っている改行コードがCSV行末の改行と認識されてしまい 列がめちゃくちゃになってしまいました。

ダブルクォーテーションに関わるExcelの挙動

何が原因だったかと言うと、 自分はいつもCSVファイルを書く時カンマの後ろにスペースを入れるのですが、 (そのため以下のように文字列前後のスペースを取り除く) Excel的にはそういうのはだめでスペースから始まる文字列と みなされてしまいました。

で、おまけにExcelは先頭にないダブルクォーテーションは制御記号ではなく ただの文字として扱ってしまい、結局ダブルクォーテーションで囲まれた改行は CSV的にエスケープされることなく行の終端記号として扱われてしまいました。

普段書いてたプログラム(in Ruby)

row = line.split(',').map {|elm| elm.strip}

ExcelのCSVファイル中の改行

Excelはセル内の改行にはLFを行の終端にはCR + LFを使っていました。 これは、さすがにExcelがよきに計らってくれるかな。 とりあえず動くので検証はめんどい。 エディタでちょいちょいといかないかしら。

行終端がCR + LFなのは RFC4180的に妥当なのですが、 なんでセル内の改行はLFだけなんだろう。 同じように出力しようとするとちょっとめんどい

まとめ

とりあえず、Excelで使うためのCSVファイルを作成する上での注意点を Excelとは直接関係ない(RFCで定められたCSVファイル一般のことも含めて) まとめると。

  1. カンマの前後にスペースを入れてはいけない。
  2. 漢字コードはShift JIS
  3. 改行コードはCR + LF。ただし、セル内の改行はLF

ちなみに使ったExcelはExcel2000 for Windows。 最新のExcelならUTF-8は使えるかな ?

リンク

雑感

今日初めてCSVファイルフォーマットのRFCを読みました。 いろいろ、細かい点が知らなくてためになりました。

でもですよ、カンマの後ろにスペースは付けたいし、 人間に見やすいようにカンマの位置というか文字列の開始位置を そろえたいじゃないですか。 まぁ、そんな理由でmustでなくshould not be ignoredなのだと思います。

だからといって、自分一人で使うからいいやと自由な形式で プログラムを書いたりするとあとではまることになるんだな。きっと。

PR


忍者ブログ [PR]
カレンダー
02 2024/03 04
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
フリーエリア
最新CM
[11/30 Lehar9296 ]
[11/19 Bihler7840 ]
[04/09 pavelvolinkins]
最新TB
プロフィール
HN:
No Name Ninja
性別:
非公開
バーコード
ブログ内検索
アクセス解析