PHPで業務システムを開発している際、社員IDや郵便番号などの「ゼロ埋め」データをCSV出力したところ、Excelで開くと先頭の0が消えて「123」のように数値化されてしまうトラブルに遭遇しました。
これはExcelが値を自動判別する仕様によるものですが、実務ではデータ欠落に繋がります。開発側で対応する方法と、運用でカバーする手順の2点を解説します。
その1: CSVデータにExcel用の書式を埋め込む方法
CSVをダブルクリックで開いた際に、強制的に文字列として認識させる手法です。
コード例
値を=値という形式で出力します。
<?php
$file_path = 'file.csv';
$handle = fopen($file_path, 'w');
$id = '000123';
$csv_row = [
'id' => '="' . $id . '"'
];
fputcsv($handle, $csv_row);
fclose($handle);
?>
この方法のメリット・デメリット
メリット
- Excelでそのまま開くだけで「000123」と正しく表示される
デメリット
- テキストエディタで開くと =“000123” と表示される
- 他のシステムにこのCSVをインポートする場合、
="などの記号がデータとして混入し、エラーの原因になる
その2: データを加工せず「Excelのインポート機能」を使う方法
システム連携などを考慮し、データ自体を加工しない手法です。
運用の流れ
- PHPからは純粋なデータ(例: 000123)をそのまま出力する
- Excelの「データ」タブ > 「テキストまたはCSVから」を選択する
- プレビュー画面で該当する列のデータ型を「テキスト」に変更して取り込む
この記事のまとめ
以下のように使い分けられます。 配布用CSVの場合 ITに詳しくない一般ユーザーが閲覧するだけなら、「1」のイコールを付与する方法が親切です。
システム間連携・バックアップ用の場合 データの整合性が重要な場合は、「2」の加工しない方法を選択し、閲覧側でインポート設定を行うのが正解です。
用途に合わせて使い分けてみてください。