九保すこひ@フリーランスエンジニア|累計300万PVのブログ運営中
ウェブサイトを開発している人ならよく実装する、データの保存機能。
これはデータベースなどに保存されている顧客データなどをローカルに保存するものですが、これを実装する際に Excel や CSV がよく使われると思います。
そして、これは世界的にも同じであるようで、すでに Laravel のパッケージには Laravel-Excel という有名なものが公開されています。
そして、私自信このパッケージにはいつもお世話になっていてこれまでどれだけの時間を短縮させてもらったかわからないほどです。
ただ、一点だけ問題点が、、、
「CSVを作るには UTF-8 以外では作れない」
というもの。
その昔このパッケージの作者にこの現象を問い合わせたことがあるのですが、どうやらこれはこのパッケージのせいではなく、PHPExcel という元のパッケージが原因とのことでした。
んー、これはまいったなー、と思ったのが数年前でした。
そして、「いや、そのうち対応するだろう」
と思い、これまではバリバリにコードを書いて CSVダウンロードを実装してきました。
そして、久しぶりに Laravel-Excel を使ってみましたが前と全く変わらず UTF-8 以外ではうまく動作しなかったので、もはやこのパッケージに頼るのはやめようと決心しました。
※正確には Excel の作成ではよろしくお願いしますm__m です!
※しかも、今のこの時代まだ Shift_JIS が使われてることも絶望しました(笑)UTF-8も対応したんじゃなかったっけ?
そこで、今回 Shift_JIS でエンコードされた CSV をダウンロード & 保存することができる Lravel 独自パッケージを作成しました。
インストール、ダウンロードは以下のGitHubページから行えます。
(使い方)
GitHub のページでも説明していますが、データと文字コードを設定して download() or save() を呼ぶだけでOKです。
(Download)
$csv_data = [ ['データ 1-1', 'データ 1-2', 'データ 1-3'], ['データ 2-1', 'データ 2-2', 'データ 2-3'], ['データ 3-1', 'データ 3-2', 'データ 3-3'], ]; $fluent = \FluentCsv::setData($csv_data, 'SJIS-win'); return $fluent->download('テスト.csv');
(Save)
$csv_data = [ ['データ 1-1', 'データ 1-2', 'データ 1-3'], ['データ 2-1', 'データ 2-2', 'データ 2-3'], ['データ 3-1', 'データ 3-2', 'データ 3-3'], ]; $fluent = \FluentCsv::setData($csv_data, 'SJIS-win'); if($fluent->save(storage_path('app/public/test.csv'))) { echo 'セーブ完了!'; }
何かのお役にたてたら光栄です!