ハマログ

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

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   2017年4月4日


関連記事

PHPでIMAP接続してメールを取得する

特定のメールアドレスで受信したメールをChatworkのAPIに送信するために、…

特定の文字列を検索したいときあるじゃん?

コマンド覚えてないんですよね。 ってことで、コマンドラインで作業する際に、「あ、…

集計処理の実装

大分間が空いてしまいましたが、前回の キーブレークを使った集計の実装を行ってみま…


← 前の投稿

次の投稿 →