ハマログ

株式会社イーツー・インフォの社員ブログ

Laravel ExcelでCSV出力したらSJISで出せなかったので自分で書きました

佐川急便か何かのシステムと連携するために、Shift_JISで出力したCSVを作成する必要があり、もともとseedデータ用にLaravel Excelを利用していたため、同じLaravel Excelで実装しようと思いました。

実装はめちゃくちゃ楽だったのですが、Shift_JISで出すために、mb_convert_encodingで文字列をエンコードして設定したところ、値があるにも関わらず、出力ファイルに空文字が出力されてしまいました。

$csvRecords = [/*省略*/];
$now = new Carbon();
Excel::create('download-' . $now->format('Ymdhis'), function($excel) use ($csvRecords) {
$excel->sheet('Sheetname', function($sheet) use
($csvRecords) {
$data = $csvRecords;
$sheet->fromArray($data, null, 'A1', false, false);
});
})->export('csv');

開発者のQAを見ると、

@zhukangfeng
And is there any way to download CSV file not in UTF-8, but such as Japanese’s encoding SJIS when use class LaravelExcelWriter.

@patrickbrouwers
No, sorry. Not at the moment.

ということで、対応していないようです(そもそもLaravelExcelはPHPExcelというライブラリのラッパーで、PHPExcelが対応していない)

ということで、早々に諦めて自分で実装します。

$csvRecords = [/*省略*/];
header('Content-Type: text/plain;charset=UTF-8');
$stream = fopen('php://output', 'w');
foreach ($csvRecords as $csvRecord) {
fputcsv($stream, $csvRecord);
}
header("Content-Type: application/octet-stream");

$now = new Carbon();
$filename = 'download-' . $now->format('Ymdhis') . '.csv';
header("Content-Disposition: attachment; filename=" . $filename);
echo mb_convert_encoding(ob_get_clean(), 'SJIS', 'UTF-8');

これで無事に出力されました。

CSVdownloadExcelLaravelShift_JISSJISUTF-8エクセルダウンロード

kaneko tomo   kaneko tomo   2017年4月4日


関連記事

夏休みの宿題(JSで放物線をシミュレーションする)

はじめに 少し前に買った、「8月号増刊『60分でわかる 微分と積分』 (Newt…

CSSフレームワークGumby

こんにちは。S.Iですヽ(´▽`)/ 突然ですが現在CSSフレームワークGumb…

php+nginxでphp.iniを変更したらphp-fpmも再起動しよう

どーも、ゆうたです。 ちょっと前に健康診断を受けたら「動脈硬化のリスク有り」でC…


← 前の投稿

次の投稿 →