2021-05-21に投稿

php(Laravel)でエクセルのインポート機能付けるときに試したもの

渡されたデータがエクセルだった

「ほいっじゃあこれ取り込んでね」
と渡されたのは、2~3万行のデータ(エクセル形式)だった。
…えー!CSVじゃないんですかー!?!?CSVはやったことあるけど、エクセルは知らーん!!

ということで、3つほどライブラリを試してようやく機能実装が出来たので、その時のメモです

Laravel Excel

URL:https://laravel-excel.com

これはLaravelのライブラリ(パッケージ?)ですね。
後に紹介するPhpSpreadsheetを基に作られております。
エクセルだけでなくcsvも扱えます。

使い方も特別難しいわけでもなく、
公式ドキュメントを落ち着いて読んでいけば大抵は問題ないはずです。

…がしかぁし!

データ数が少なめのテストデータでは問題ありませんでしたが、
いざ実際の2~3万件データで試したところメモリ不足で死に至りました。(チーン)

php-fpmの設定弄ってみたり、
toArrayがいけないのか?と思いonRowで1行ずつinsertしてみたり…。
かなり色々試行錯誤してみましたが解決には至らず、ライブラリ使用自体を断念しました…。

(もし解決法ご存知の方がいらっしゃいましたら、そっとご教示いただければ幸いに存じます)

PhpSpreadsheet

URL:https://phpspreadsheet.readthedocs.io/en/latest/

くそう、ならば元であるコイツで試してみるか!
てな感じで、半ヤケクソでやってみました。
なお、phpExcelというライブラリの後継版らしいです。

結論、メモリ不足も解決せず、なんなら処理時間も増えて、解決には至りませんでした…。
使用感としては、シンプルで使いやすいなーとは思いました。
また、laravel excelより使用率が高いので、参考にできる記事も多い(日本語記事も多い)という点は良かったです。

Spout

URL: https://opensource.box.com/spout/

救 世 主

メモリ不足問題はこれで解決しました!!!
代わりにCPU使用率がギュイーンと上がりますが。

ただこれ、マイナーなのかわかりませんがググってもほぼ出てきません。
出てきたとしても全部英語です。google翻訳がある世界に生まれてよかった。

基本公式ドキュメントを頼りにやるしか無いので、赤ちゃんエンジニアにはちょっと厳しかったです…。
やりたいことが至ってシンプルだったのでなんとかなりましたが。

気力があれば、使い方のメモも別で書こうかと思います。来世までにはきっと。

なお後日

えらいひと「ちょっとフォーマット変えたので、再度送るで!これで取り込んでくれや! つCSVファイル」
ワイ「いやCSVで出力できんのかい!!!!!!!!!!!」

~完~

ツイッターでシェア
みんなに共有、忘れないようにメモ

みみみみみ

2歳と2ヶ月くらいの赤ちゃんです。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント