【PHP】PHPでExcelファイルを操作するお話 その1

  • このエントリーをはてなブックマークに追加

こういうことってないですか?

webでの管理システムを設計するときに「CSVでインポートやエクスポート機能を付けてよ」って言われる事があります。

インポートに関しては一括登録や一括削除や更新など割とリスクが大きいのですが、エクスポートはあったりします。

CSVなので本来はカンマ区切りで並べてtext/csvとかで吐き出せば簡単なのですが、下記のような不具合が発生する可能性があります。
  • データの文字列にカンマが入ってるので、ズレる
  • 上記を防ぐためにダブルクォートで文字列を囲うも文字列にダブルクォートが入っている
  • 電話番号ハイフンの場合「09012345678」がExcelで開くと「9012345678」と数値になる
CSV上は特に電話番号などの文字列→数値はCSV上は正しいのですが、Excelで管理する人が多いため、この部分をどうにかしないとダメだと思います。

ただこれはオペレーション上の問題であり、正直システムとしてはどうしようもない部分なのも事実です。

となると・・・

最初からExcelファイルで処理すれば良いのでは?

って事でPHPを使ってExcelファイルを操作する方法をまとめました。

なお、ここでいうExcelファイルですが、Excel97-2003形式の「.xls」ではなくExcel2007以降の「.xlsx」形式のみ対応となります。古いファイルは一度.xlsx形式に変換してください。

インストール方法

みんな大好きComposerを使います。
ちなみにインストールするライブラリは「PhpSpreadsheet」というものを使います。

「レンタルサーバーだとサーバーからインストールできないよー」って場合はローカルPCにComposerをインストールしてそこからインストールしたvendorフォルダをアップしましょう!

これにより、PhpSpreadsheetがプロジェクトに追加されます。

PHPでライブラリの呼び出し方

これも一般的なComposerライブラリを読み込んで使うライブラリだけ読み込む形です

インストールがしっかりとできていれば、スムーズに行きます。

Excelファイルのエクスポート方法

それではExcelファイルのエクスポートを行います。
基本的にはCSVファイルをエクスポートする感じで、連想配列に値を放り込んでそれをライブラリを使って出力します。

細かく説明していきます。
今回はMySQLのデータをExcelで出力してヘッダーのセルの色を灰色にするという感じです。

MySQL周りについては説明は割愛します。(SELECTで全件取得しているだけです)

上の方でライブラリの読み込みを行いましたが、今回はセルの装飾を行うので1行追加してます。

出力するデータを連想配列$dataに入れてます。
1行名はヘッダー行にしたいのでここに列のタイトルを入れています。

ここはMySQLからデータを入れて連想配列に流し込んでます。
「電話番号がハイフンなしで入れてるよ」「文字列の中にカンマがあるよ」というのをわかりやすくするため固定で入れてます。

fromArray()はセルA1から連想配列を展開するよってことです。
これで自動的にセルの中に文字列を入れてくれます。

チェインしてますが、ヘッダー行になるA1からD1までの背景色をFFDDDDDD(灰色)にしますよというのを1行で記述してます

セルの横幅は初期値なので、これを最後にすることで、横幅を自動調整してくれます。
ただ、内容によっては見栄えが悪くなる可能性があるのでそこは要調整です。
最後にカーソルの位置をA1に指定します。

Excelファイルに書き出しです。
これはサーバーに保存してますが、ダウンロードさせたい場合はreadFileで吐き出せばダウンロードできます。

これだけで簡単にExcelファイルで出力できます!
電話番号もちゃんと文字列として処理してくれるので、先頭の0抜けがありません!

今後はExcel出力でいいのではと言う気がします。
ただ出力したCSVファイルを別のシステムでインポートするとかだとCSVはマズいので、CSV出力しましょう。

ちなみに・・・

PhpSpreadsheetでもCSV出力が可能です。
先ほどのソースを少し改造してみて

これでできますね!
カンマ区切りでエンクロージャはダブルクオートで改行ありとか細かなところまで設定できて最高です!

Excelファイルのインポート方法

今度は逆にExcelファイルを読み込んでテーブルにインサートする方法をまとめます。
HTMLからPOSTでExcelファイルをサーバーに保存するなどは今回は実装しません。
元々サーバーにあるExcelファイルをインポートしてみます

CSVよりもシンプルにインポートすることができます。

実質的にこれだけでできるのは楽すぎますね。
バリデーションチェックだけはしっかりと行いましょう!

これを組み合わせると???

インポートとエクスポートを組み合わせると、例えば何かの書類のテンプレートをExcelで作成し、そこにセルを指定して文字を入力し、PDFで出力することも可能かなと思います。

次回はその形でExcelで作ったPDFファイルの作成を紹介できればと思います。

執筆者:松本[ エンジニア ]

関連記事

プログラミング

SharePointではできないこと 4選

「これってSharePointでできないの!?」なんていう瞬間、開発やカスタマイズの現場では意外と多くあります。SharePointはとても柔軟なプラットフォームですが、実は“万能ツール”ではありません。「コードを書けば何とかなる」と思って構築を進めると、モダンページの仕様や制限に阻まれて苦い思いをすることもしばしば。今回は、実際のプロジェクトや運用の中で見えてきた「SharePointではできないこと」をまとめて紹介します。 目次1 1.CSSとJSが直接使えない1.1 ク […]

Webサイト制作

WordPress納品後にクライアントが安心して運用できる仕組みづくりをしよう

ホームページ制作において、更新機能を手軽に導入できるのがWordPressです。 専門知識がなくても記事の投稿やページ編集を行いやすい一方で、クライアントが自分で運用するには、が欠かせません。 今回は、そのための仕組みづくりについてご紹介します。 制作側の方はもちろん、クライアント側でホームページ運用を担当される方も、制作時のご相談などにぜひ参考にしてみてください。 目次1 管理画面のロゴを企業ロゴに変更する2 管理画面のURLを変更する・認証などを付けてセキュリティ面を強化 […]

Webデザイン

アプリのロゴアニメーションをAfter Effectsで作成→Lottieに変換【iOS/Android対応】

こちらは、当社でリリースしたアプリ「ピンピタ」で使用しているロゴアニメーションです。 スプラッシュ画面でロゴが動くと、ぐっとアプリらしい印象になりますし、作ってみたいですよね。 今回は、After Effects(以降AE)でロゴアニメーションを作成し、アプリに組み込むまでをご紹介します。 AEと聞くと難しい印象がありますが、PremiereやFlashなどを触った経験がある方なら、すぐに慣れます。 もう一度再生 目次1 作業フロー1.1 注意点:グラデーションが使用不可2 […]

株式会社8bit (エイトビット)

東京都目黒区でWebサイト制作、Webシステム開発などを行っております。
コーポレートサイトやWebサービスの企画・提案を得意としており、自社での経験を元にアイデアをカタチにするお手伝いをさせていただいております。

Web制作に関するご相談はお気軽にどうぞ

弊社に制作をご依頼いただく際の費用感をご確認いただける、
見積りシミュレーションをご用意いたしました。