Laravel ExcelのCSVエクスポートをShift-JIS形式でダウンロードさせる方法(Laravel 9)
Laravel ExcelでエクセルファイルやCSVファイルのアップロードやダウンロードをさせる際に出くわすのが文字コードの問題です。
このLaravel Excelの文字コード問題の解決方法はいくつかの記事で紹介されておりますが、mb_convert_encodingを使って文字コードを変換する方法もしくは、BOM付きのデータにする、というどちらかの記事がほとんどでした。ですがその方法ではなく、それよりももっと簡単かつ私が使っているLaravel9のバージョンでの正攻法のやり方があったので紹介します。
Laravel9の場合、ルートにconfigフォルダがあり、Laravel Excelをインストールしていた場合にはその中にexcel.phpという設定ファイルが入っているのが確認できます。そのファイルを開くと頭の書き出しはこんな記述からスタートしているはずです。
<?php
use Maatwebsite\Excel\Excel;
return [
'exports' => [
さらに下の方にスクロールして以下の記述を見つけてください。
'csv' => [
'delimiter' => ',',
'enclosure' => '"',
'line_ending' => PHP_EOL,
'use_bom' => false,
'include_separator_line' => false,
'excel_compatibility' => false,
'output_encoding' => '',
],
csvと書かれている箇所です。
これは間違いなくCSV書き出しのための設定がありそうな気配。
この中のoutput_encodingの値に文字コード指定を入れればOK、たったそれだけです。ちなみにShift-JISの場合、SHIFT-JISと入れればいいのですが、私はSHIFT-JISの拡張版であるCP932(拡張版という言い方が正しいかわかりませんが)を設定しています。
'csv' => [
'delimiter' => ',',
'enclosure' => '"',
'line_ending' => PHP_EOL,
'use_bom' => false,
'include_separator_line' => false,
'excel_compatibility' => false,
'output_encoding' => 'CP932',//拡張shift-jis
],
ダウンロードしたファイルの文字コードを調べるとShift-JISになっていました。
おまけ:インポートの文字コードも同じやり方でOK
エクスポートがこのやり方でできるのであればインポートも同様にできるはずです。インポート時の読み込みファイルがShift-JIS形式の場合は、同じくconfig/excel.phpファイルにて今度はimportsと記述されているところを探してください。
'imports' => [
/*
|--------------------------------------------------------------------------
| Read Only
|--------------------------------------------------------------------------
|
| When dealing with imports, you might only be interested in the
| data that the sheet exists. By default we ignore all styles,
| however if you want to do some logic based on style data
| you can enable it by setting read_only to false.
|
*/
'read_only' => true,
importsの記述からさらに下の方へ進み
'csv' => [
'delimiter' => null,
'enclosure' => '"',
'escape_character' => '\\',
'contiguous' => false,
//'input_encoding' => 'UTF-8', デフォルト
'input_encoding' => 'CP932',//拡張shift-jis
],
importの方にもcsvの記述ありました。
その中のinput_encodingの値をデフォルトではUTF-8となっているので、「CP932」もしくは「SHIFT-JIS」にしましょう。これでSHIFT-JISのファイルがアップロード可能となります。