Laravel-Excel の CSV文字化けに絶望したのでパッケージを作った!

ウェブサイトを開発している人ならよく実装する、データの保存機能。
これはデータベースなどに保存されている顧客データなどをローカルに保存するものですが、これを実装する際に 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ページから行えます。

Sukohi/FluentCsv

(使い方)

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 'セーブ完了!';

}

何かのお役にたてたら光栄です!



にほんブログ村 IT技術ブログへ  にほんブログ村 IT技術ブログ プログラム・プログラマーへ


BugGUI バグ報告を効率化
たった3分でバグ報告完了!? BugGUI