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のインポート機能」を使う方法

システム連携などを考慮し、データ自体を加工しない手法です。

運用の流れ

  1. PHPからは純粋なデータ(例: 000123)をそのまま出力する
  2. Excelの「データ」タブ > 「テキストまたはCSVから」を選択する
  3. プレビュー画面で該当する列のデータ型を「テキスト」に変更して取り込む

この記事のまとめ

以下のように使い分けられます。 配布用CSVの場合 ITに詳しくない一般ユーザーが閲覧するだけなら、「1」のイコールを付与する方法が親切です。

システム間連携・バックアップ用の場合 データの整合性が重要な場合は、「2」の加工しない方法を選択し、閲覧側でインポート設定を行うのが正解です。

用途に合わせて使い分けてみてください。



関連記事