Excel CSVと標準CSVの真の違い


16

Excel CSVと標準CSVの本当の違いは何ですか?

たとえば、1つのセル内で改行を含む列を処理する場合、どのように異なる方法でエンコードしますか?

回答:


19

「標準」CSVとして定義するものに完全に依存します。私に関する限り、Excel は「CSVファイルの一般的な形式とMIMEタイプ」であるRFC 4180で概説されいるルールに従います。

最初の行の最初のセルに2つの改行があるテーブルを考えます。Excelでは、次のようになります。

+---+---------------+------------+------------+
|   | A             | B          | C          |
+---+---------------+------------+------------+
| 1 | col1, line1a  |            |            |
|   | col1, line1b  |            |            |
|   | col1, line1c  | col2, row1 | col3, row1 |
| 2 | col1, row2    | col2, row2 | col3, row2 |
+---+---------------+------------+------------+

さて、Excelはこれをどのようにエクスポートしますか?見てみましょう–テキストエディターはこれを表示します。

"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"

あまり洗練されていません。0D改行がセル内にあった場所にキャリッジリターン(hex )を挿入します。すべてのセルは二重引用符で囲まれています。また、実際の行はキャリッジリターンで区切られます。

これを正しく解析するために、CSVパーサーは以下を行う必要があります。

  • 二重引用符(セル)内にある場合、キャリッジリターンを無視します。
  • 二重引用符の外側にある場合、キャリッジリターンを無視しない

そうしないと、このような文字化けが発生します。改行が無視されなかったため、2 行ではなく4行になっていることに注意してください。

+---+---------------+------------+------------+
|   | A             | B          | C          |
+---+---------------+------------+------------+
| 1 | "col1, line1a |            |            |
| 2 | col1, line1b  |            |            |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2    | col2, row2 | col3, row2 |
+---+---------------+------------+------------+

しかし、RFCが言っていることを見てみましょう。Excelが正しかったかもしれません。

改行(CRLF)、二重引用符、およびコンマを含むフィールドは、二重引用符で囲む必要があります。

きちんとした、それはまさにExcelがやったことです。要約すると、Excelは「標準」CSVファイルの推奨事項に従うようです。適切なCSVパーサーがあれば、Excel CSVファイルも読み取ることができるはずです。


@shhck:「Excel」CSVと「CSV」を分離するCSVパーサー実装が表示されるのはなぜですか?また、Excelは非常に堅牢な実装であることがわかりました。
user157195

@ user157195パーサーによって異なりますが、Excelの入力とExcel以外の入力に違いがある理由については、ドキュメントを参照してください。なぜあるべきなのかわかりません。これは、Excel CSVを他のすべてと同様に処理するRからのみ知っています。ただし、XLSも読み取ることができます。
-slhck

2
Excelで生成されたCSVファイルをあらゆる形とサイズで何年もプログラムで読んでいる人として、私はslhckが100%正しいことを証明できます。Excelは100%の「標準」CSVファイルを生成します。毎回。
マークヘンダーソン

@Farseeker確認ありがとうございます!(そして1337人の担当者がいます!)
slhck

5
注意!'、'を小数点として使用する国では、Excelは "非常に賢い"ため、 ';'を使用します。区切り文字。これにより、Zee Germanzは「引用符」、「in」、「their」、「files」が多すぎるのを防ぎます。残念ながら、彼らがそれを英国のオフィスに送信すると、AllSmooshedUpIntoASingleCellOnEveryLineが取得されます。鮮やかさ。
ルークアッシャーウッド

-1

元のcsv実装からの私の理解は、すべてのテキストフィールドが引用符で囲まれており、数字を含める必要はないということでした。Excelはこれを行いません。Excelで生成されたcsvファイルをMicrosoft以外のプラットフォームにアップロードしようとすると失敗します。これはマイクロソフトの標準的なアプローチであり、相互運用性を無視して、盲目的にルールに従うことに焦点を合わせています。IEでも同様のことが起こりました。パディングとマージンの属性についてはhtml / cssルールに正しく従い、既存のすべてのWebページとWebブラウザーがそれらを異なる方法で処理するという事実を無視しました。その結果、ほぼすべてのWebページにIE用の特別なルールが追加されました。Excelで生成されたcsvファイルは役に立たないので、「連結」関数の列を使用して手動で適切に作成します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.