人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

LaravelでCSVファイルをインポートする

● LaravelでCSVファイルをインポートする

ガリガリ書いてもいいですが、 fast-excelを使ってやるとさっとできます

https://github.com/rap2hpoutre/fast-excel

https://github.com/rap2hpoutre/fast-excel

fast-excelのインストール

composer require rap2hpoutre/fast-excel
use Rap2hpoutre\FastExcel\FastExcel;
$csv = (new FastExcel)->import('data.csv');
dd($csv);

これだけで「data.csv」を読み込んで $csv にハッシュの配列形式で格納します。

● CSVインポート時にカラム名(項目名)を自動でつける

CSVの1行目にカラム名を記述しておくとその名前のハッシュに変換して取り込まれます。

● 日本語の文字コードが化ける問題への対応

文字コードは utf-8 以外の場合文字化けします。 csvファイルは sjis なことが多いので、事前に変換しておきましょう。

    //========================================== convertFileEncode
    protected function convertFileEncode($infname="", $incode='sjis-win', $outfname="", $outcode='UTF-8', $nl="\r\n") {
        if ( ! is_file($infname) ) {
            die("変換失敗:{$infname} が見つかりません.");
        }
        $tmp_filename = getmypid().'.tmp';
        $outfp = fopen($tmp_filename, 'wb');
        if ($outfp === FALSE) {
            die("変換失敗:{$tmp_filename} に書き込むことができません.");
        }
        $fp = fopen($infname,'r') or die("ファイル({$infname})のオープンに失敗しました");
        while ( ($line = fgets($fp,999999)) !== false ) {
            $outstr = mb_convert_encoding($line, $outcode, $incode);
            $outstr = preg_replace("/\r\n|\r|\n/", $nl, $outstr);
            fwrite($outfp, $outstr);
        }
        fclose($fp);
        fclose($outfp);
        rename($tmp_filename, $outfname);
        chmod($outfname, 0666);
        return true;
    }

エラー処理は適宜書き換えてください。(とりあえず die() していますが、例外を投げた方がいいでしょう。)

No.1379
10/13 14:01

edit