文字化け、列ズレ、先頭ゼロ消失、改行分割は別の問題です。
目次
何を分けて考えるか
CSVエラーは文字コードと列の仕様違いを分離する。
元ファイルを保存し、取込後の行数・列数・ID・合計を照合します。
現場の事例で切り分ける
住所にカンマを含む行を文字列分割で扱うと、正常な文字コードでも列がずれます。
再現用の最小CSVを固定する
住所の「1,2号館」、引用符を含む品名、改行を含む備考、先頭ゼロの品番を1ファイルに並べておきます。取込で列が崩れるなら行やカンマで単純分割していないか確認します。表計算で開いて保存した時に品番や日付が変わる問題は、文字コードの変換だけでは直りません。取込時にID列を文字列として扱い、元ファイルから再処理できるようにします。
最初に確かめる範囲
このケースで使う記録は、UTF-8・SJIS、区切り文字、日付と桁数です。標準サンプルCSVと照合し、異常値を別ファイルに退避して再取込する。
CSVの形式と表計算の型を切り分ける
実績を説明する
住所のカンマ、備考改行、引用符、先頭ゼロを同時に含む3行を期待値と照合する。
条件が変わると何が変わるか
文字化けと列ズレとIDの変化は別の試験。失敗行だけ復旧する際の重複も見る。
誰がどこを確認するか
ExcelでIDが17と表示された場合、書式でゼロを付け直す前に、元のCSVから文字列で取り込み直す。三件の期待結果と照合する。
3件だけのCSVで取込結果を比べる
配布ファイルを直接上書きせず、テキスト取込の機能で開きます。この例はUTF-8、BOMなし、区切り文字はカンマです。商品IDを文字列として取り込みます。住所のカンマや備考の改行は一つのセルの中にあり、実ファイルの行数とデータの件数は一致しません。
商品ID,品名,住所,備考,数量
00017,白ラベル,"1,2号館",通常,2
00309,"部品""特""",3号館,"午前
受取",1
00000,空箱,本館,,0
| 確認箇所 | 期待結果 |
|---|---|
| 全体 | ヘッダーとは別に3件、各5列 |
| 商品ID | 00017、00309、00000のまま |
| 1件目の住所 | 1,2号館が1セル |
| 2件目の品名と備考 | 部品"特"。備考は1セル内で午前と受取が改行 |
| 3件目 | 空の備考は空欄。数量0は0として残る |
文字化けなら文字コードを確かめます。列ズレがあるなら引用符で囲まれた値や内部の改行を正しく処理しているかを見ます。IDだけ変わるなら、自動型判定を外して再取込します。個々の設定を一つずつ変え、期待結果のJSONと比較すると原因を切り分けられます。
条件が変わるときの判断
元ファイルと解析結果の両方を保存し、失敗行だけ例外へ出す。
| 比較の観点 | 確認する内容 |
|---|---|
| 次の判断に進む | BOM、区切り、クォート、改行、文字型、ID、行数、合計と再処理結果を確認する |
記録と処理を設計する
文字コード、BOM、区切り、クォート、改行、ヘッダー、型と日付を仕様化し、異常行を隔離します。
試す作業 標準サンプルCSVと照合し、異常値を別ファイルに退避して再取込する。
現場で先に確認する条件
外部から受け取る形式で、テキストの保存時にExcelが値の型を変える問題と、読込時の設定で文字が化ける問題を分けます。生データを再度開ける方法と、変換した後の表示を両方確認します。
エラー行を読み飛ばして件数が減った場合には、保留明細を元レコードへ戻せるようにします。相手先がヘッダーを変える場合は、旧版を含めて同じチェックを通します。
データ交換で揃える範囲
ファイルが受け取れた時点と、注文や在庫として登録した時点は別です。受領を相手へ返したのに値を取込めていない場合、後から同じファイルを受けた際に誤りなく回復できる必要があります。
識別子・版・例外
同じ相手から複数ファイルを受ける場合、送信元、相手が発行した番号、形式の版、訂正・取消の別を見ます。ファイル名に日付を付けるだけでは、過去分の再送や同名の訂正を区別できません。
記録に残す項目
- UTF-8・SJIS
- 区切り文字
- 日付と桁数
改善の結果を確かめる
改善の前後で「取込失敗行率」を比較します。集計の対象、期間、観測できなかった件数も残します。取込失敗行率です。改善前後で件数や時間を比較する場合は、対象利用者と対象レコード数を固定することが必要です。担当や物量が変わると単純な件数比較は誤解につながるため、対象条件も併記します。
記録には「対象期間/分母/改善前/改善後/増減の理由/現場負担の変化」を設けます。数値が改善しても、そのために別部署へ転記や問い合わせが移動していないかを確認してください。
試行で確かめる落とし穴
確認したいのは「Excel保存時の自動型変換を見落とす」という状態が残るかどうかです。
読み合わせと実地確認
- 再現する場面
- 文字化け、引用符、先頭ゼロ、セル内改行の例を作る
- 確認する範囲
- 元のバイト列と取込後の列数・行数・値を照合する
- 判断できる状態
- 一部行を黙って飛ばさず、エラーを起点へ戻せる。
再取込を想定した例外管理
読み込み失敗を一行ごとに返す場合、そのエラーが原本の行番号、受注の行ID、取込後のどれを示すか明記します。元ファイルを修正する場合でも失敗した版が追えるように保存し、手入力した値を同じファイルから上書きしない条件を確認します。
表計算で手元に保存する作業もテストに加えます。仕様がUTF-8でも、CSVを開く操作で日付や先頭ゼロが書き換わることがあります。出力したファイル、取り込んだ結果、復旧時の再取込で値を比較します。
運用を選ぶときの追加の論点
文字コードを指定しても、表計算ソフトが日付や品番を変換したり、ファイル内の改行を誤って別行として処理したりします。原本に入っている文字と、画面へ表示された値を区別します。読み込み後に行数、明細ID、数量合計を照合し、エラーの行だけを繰り返しても二重に登録されないことを試します。
社内で説明して引き継ぐ
取引先に元データと変換後の具体的な差を示し、形式仕様と修正を確かめる担当を決める。
| 同じ案件の見方 | 読み合わせで比較する内容 |
|---|---|
| 判断が難しい状態 | 表計算で開いて見えた値をCSVの原値とみなす |
| 判断できる記録の作り方 | バイト列、文字コード、引用、型指定を別々に検証する |
| 引き継げる状態 | 先頭のゼロと日時を取込前後で同じ値として扱える |
同僚に聞く
列追加を受け入れたとき古い契約の受け手への通知は必要か?
関連する判断 送り状の手入力をやめたい:CSV連携と運送会社別出力の基本 / 取引先ごとに異なるEDI・CSVをつなぐ変換テーブル
CSV形式とExcelの参照資料
- RFC 4180:CSVの引用符と改行(RFC Editor)
- Excelで先頭ゼロを保持する(Microsoft Support)
ここで扱うのはRFC 4180に沿ったテスト例です。相手システムが指定する文字コード、改行、区切り文字が違う場合は、実際の入出力仕様を優先します。
