ハマログ

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

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日


関連記事

AWS EC2でファイル共有 東京はまだだけど米国サーバーでEFS試してみる

こんにちはいけしまです。前回のブログ更新から5ヶ月もたってしまいました。すみませ…

「example.com」について

先日、弊社の品質管理部の中でこんな話題がありました。 試験の中で「存在しないメー…

ORA-28001 the password has expiredとの戦い

こんにちは、かねこです。 ローカルのOracleが突然起動しなくなりました。 エ…


← 前の投稿

次の投稿 →