Excelに壊されないCSVを作るツール「csv→safe」を作った
Excelに壊されないCSVを作るツール「csv→safe」を作った
ExcelでCSVを開いたときに、
- 郵便番号や電話番号の 先頭ゼロが消える
-
2024-01-01のような値が 日付に変換される - 大きな数字が 指数表示(1.23E+15 のような形式)に変換され、保存すると壊れる
といった経験はありませんか?
これは Excel がCSVを開く際に
値の型を勝手に推測して変換してしまうことが原因です。
業務でCSVを扱っていると、意外と頻繁に踏む“罠”だと思います。
そこで今回、
Excelに壊されないCSVを作る無料ツール
「csv→safe」を作りました。
👉 https://tools.tsukibit.com/csv2safe/
csv→safe でできること
使い方はとてもシンプルです。
- CSVを 貼り付ける か ファイルを選択
- 変換ボタンを押す
- 安全なCSVをダウンロード
csv→safe は、CSVの全フィールドを必ず "..." でクォートします。
これにより、Excelはすべてを「文字列」として扱い、
自動変換によるデータ破損を防げます。
対応しているポイントは以下です。
- UTF-8(BOM付き / なし)
- Shift_JIS(CP932)
- 大容量CSVの警告表示
- 先頭100行のプレビュー
- すべての処理はブラウザ内で完結(サーバー送信なし)
なぜ「全列クォート」なのか
ExcelでCSVを開くと、値の内容によっては次のような変換が起こります。
-
0012345→12345(先頭ゼロが消える) -
2024-01-01→ 日付として変換される -
1234567890123456→1.23457E+15(指数表示)
特にこの 1.23E+15 のような指数表示は、
見た目は数字に見えても、保存し直すと元の桁数が失われ、
元の値に戻せなくなることがあります。
ExcelでCSVが壊れる理由はとても単純で、
Excelが「これは数値」「これは日付」と勝手に判断する
からです。
そこで一番確実なのが、
すべての列を明示的に文字列として扱わせること。
たとえば、こんなCSVです。
"00123","2024-01-01","0123456789"
これなら、
- 先頭ゼロは消えない
- 日付に変換されない
- 保存しても壊れない
csv→safe は、この処理を確実に行うことだけに特化したツールです。
作るときに意識したこと(少しだけ技術の話)
小さなツールですが、業務で安心して使えるように、
いくつか気をつけた点があります。
- CSVの解析には PapaParse を使用し、
クォートや改行を含むCSVにも対応 - 文字コードは 無理に自動判定しない設計
(BOM付きUTF-8のみ自動、それ以外は明示的に選択) - ファイル入力時にCSV構造を壊さないよう、
安易なtrim()を使わない - ダウンロード用の object URL は revoke して
メモリリークを防止
「小さいツールでも、事故りにくくする」ことを目標にしました。
tsukibit tools について
csv→safe は、個人で作っている tsukibit tools のひとつです。
-
paste→join
改行区切りのテキストを SQL の IN句や JSON 配列に変換 -
md→text
Markdown をプレーンテキストに変換
いずれも 無料・ブラウザ内完結で使えます。
おわりに
Excel × CSV は避けて通れない組み合わせですが、
「壊れないCSVを用意する」 だけで、かなりの事故を防げます。
先頭ゼロの消失や日付変換だけでなく、
大きな数値が 1.23E+15 のような指数表示に変換される問題も、
csv→safe ならまとめて防ぐことができます。
同じような悩みを持っている方の助けになれば嬉しいです。
業務でCSVを扱う機会があれば、ぜひ一度使ってみてください。
Discussion