ExcelからエクスポートされたCSVファイルの処理
Microsoft ExcelのCSVエクスポートの癖に対処:BOM文字、ロケール固有のデリミタ、日付シリアル番号、数式アーティファクト、エンコーディング問題。
Real-World
詳細な説明
Excel CSVエクスポートの癖
Microsoft Excelは世界で最も一般的なCSVファイルのソースであり、パーサーを困惑させるいくつかの非標準的な動作を導入します。
Excel固有の問題
1. UTF-8 BOM(バイトオーダーマーク)
Excelで「CSV UTF-8として保存」すると、ファイルは3つの不可視バイト(EF BB BF)で始まります。これらのバイトにより、最初のカラムヘッダーがnameではなく\uFEFFnameとして読み取られます。
2. ロケール依存のデリミタ
ExcelはシステムのリストセパレータをCSVデリミタとして使用します。US/UKではカンマですが、ドイツ、フランスなどではセミコロンです。
3. 日付のフォーマット
Excelは日付を以下のように出力する場合があります:
- フォーマットされた文字列:
"1/15/2024"(システムロケールに依存) - シリアル番号:
45306(保存前にセルが「標準」でフォーマットされている場合)
4. 数式アーティファクト
数式を含むセルは計算値としてエクスポートされますが、アーティファクトが残ることがあります:
="001234"— Excelがテキスト解釈を強制するための先頭等号クォートパターン#REF!、#N/A、#DIV/0!— エラー値がリテラル文字列として表示
5. セル内の改行
ExcelではAlt+Enterによるセル内改行が許可されています。これらはCSVではクォートされたフィールド内のリテラル改行として保持されます。
Excel CSV用の堅牢性チェックリスト
- UTF-8 BOMのストリップ
- デリミタの自動検出(カンマ vs セミコロン)
- クォートされたフィールド内の二重クォートの処理
- 複数行クォートフィールドのサポート
- Excelシリアル日付の検出と変換
- 数式プレフィックスのトリム
- Excelエラー値のnullへのマッピング
ユースケース
アップロードされるファイルの80%がExcelから来るSaaSアプリケーションのCSVインポートウィザードを構築する場合に使用します。インポーターはユーザーの介入なしにすべての一般的なExcelエクスポートの癖を処理する必要があります。