人気の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)->importSheets('data.csv');
dd($csv);

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

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

文字コードは 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
11/27 18:23

edit