ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

CSV形式のファイルをExcelで表示すると、違って見えるので注意が必要

CSV形式でデータを出力をするプログラムを作成しますが、Excelで読み込むと見た目が変わってしまうのは知っています。
改めてどう変わるのか気になったので、試してみました。

試した結果

サンプルとして用意したのは、以下のファイルです。

2016-10-10 10:11:22,0101,a
b
c
"2016-10-10 10:11:22","0101","a
b
c"

ダブルクォーテーションの有無で2行あって、1列目が日時で日付のセパレータが-(ハイフン)です。
2列目が先頭が0埋めされた文字列で、3列目が改行コード入りの文字列です。

Excel 2013で読み込んだ結果は以下のようになりました。
f:id:AJYA:20160728055147p:plain
ダブルクォーテーションの有無で結果が違うのは、3列目の改行コードがある場合の扱いだけです。
1列目と2列目は、同じ結果になっています。

1列目は日付のセパレータが/(スラッシュ)になって秒が表示されなくなっています。
2列目は先頭の0埋めがなくなっています。

テキスト ファイル ウィザードを試した結果

Excelのデータメニューからテキストファイルをクリックして、CSV形式のファイルを読み込むと、テキスト ファイル ウィザードが起動します。
f:id:AJYA:20160728092328p:plain

テキスト ファイル ウィザード 1/3では、元のデータの形式で、「カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ」を選びます。
f:id:AJYA:20160728092836p:plain

テキスト ファイル ウィザード 2/3では、区切り文字で「カンマ」を選びます。
f:id:AJYA:20160728093013p:plain

テキスト ファイル ウィザード 3/3では、1列目のデータ形式を日付、2列目と3列目のデータ形式を文字列を選びます。
f:id:AJYA:20160728093451p:plain

結果は、2列目は先頭が0埋めされた文字列として表示されました。
1列目はそのまま読み込んだ場合と同じです。
3列目はダブルクォーテーションで囲んでいても改行で別の行とみなされています。
f:id:AJYA:20160728060708p:plain
3列目のデータ形式を標準にしても同じでした。

Google スプレッドシートで試した結果

ものは試しと、Googleスプレッドシートでも試してみました。
ファイルメニューのインポートを選んで、読み込んだ結果は以下のようになりました。
区切り文字は、「自動的に検出する」を選んでいます。
f:id:AJYA:20160728055545p:plain
Excelでそのまま読み込んだ場合と変わらない結果となっています。

CSVファイルの内容をそののまま表示するのは難しい

Excelで読み込む前提のデータを作るわけではないので、Excelで読み込んで表示したときに変わってしまうのは問題はありません。
動作確認としてExcelで読み込んで表示したときに、変わって表示されていることに気づかず、慌ててプログラムが正しいのかと確認をしてしまいそうです。