PHPでExcelと闘う

この記事は「株式会社グロージェント Advent Calendar 2016」の9日目の記事です。

RYです。
久しぶりの技術ネタでも書こうかと思います。
特に目新しいものでもないのですが、こういうことをする必要がある時もあるのさ……ということで。

Excelに入力するのを自動化したい

元々は社内のシステムで勤務時間などを管理していたのですが、やはりExcelが欲しいなーという要件が出てきたのです。
なのでDBにある内容だったりをとってきてそれをExcelに入れたいなと思っていました。
こういう地味な仕事はエンジニア的には正直、テンションが上がりにくい……
そこで当時そのシステムを作ることになった私はブームだった(世の中的にも自分的にも)Node.jsでの実装をしようと思いました。

 

Node.jsでは中々難しかった

結論としてはNode.jsはやめましたw

これは言語がという話ではなく、Node.jsには満足できるレベルでExcelのファイルを弄るライブラリがなかったのですね。
しかし元々Excelが好きではない私です。
xlsxを弄る為にゴリゴリライブラリを直すなんてこともしたくないし、相当時間かかりそうです。
仕様から調べなければならないですし……

そこまでやるよりはもっと時間を大切にしようと思いました。
ついでに時間はそんなにありませんでした。

 

そこでPHPExcel

そういう流れでPHPでExcelを弄ることになりました。
PHPにはPHPExcelというライブラリがあるのですが、これが試した中では一番無難にやってくれます。

https://github.com/PHPOffice/PHPExcel

composerでインストールしましょう。

 "require": {
    "phpoffice/phpexcel": "~1.8"
  },

さて、ここからプログラミング開始。

大変ですぞ!……と言いたいところですが、実は至って簡単。

今回はテンプレートとなるファイルを読み込んで、そこにPHPから入力してファイルを保存しましょう。
これが出来れば大幅にエクセル作業の時間が短縮できますねb

    // まずは読み込むファイルと出力ファイルを指定しちゃう
    // 今回はサンプルなのでハードコーディングで
    $src = 'template.xlsx';
    $dest = 'output.xlsx';

    // テンプレート読み込む為にリーダーを作る。
    // xlsxフォーマットを指定
    $reader = PHPExcel_IOFactory::createReader('Excel2007');
    // 読み込む
    $excel = $reader->load($src);
    // 最初のシートをアクティブにする
    $excel->setActiveSheetIndex(0);
    // シートオブジェクトの取得。シートに関する操作はこれでやることになる。
    $sheet = $excel->getActiveSheet();

    // A3セルになんか入れる
    $sheet->setCellValue('A3', 'アドベントカレンダー2016');

    // 列と行で指定することも可能。ループとかで活躍。
    // 6列3行目になんか書く
    // ColumnとRowで始まるインデックスが違うのに注意
    $sheet->setCellValueByColumnAndRow(5, 3, 'お疲れサマンサ');

    // ライター作成
    $writer = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
    // ファイルをアウトプット
    $writer->save($dest);

こんな感じで簡単に出来ました。
いくつか試したライブラリの中では一番いい感じです。
皆さんもPHPでExcelと上手く付き合いましょう。

About the author

Ryu Seino
Ryu Seino

2015年入社。
コンシューマー向けWebサービス、商社の基幹システムなどを担当した後、2016年の途中から管理部システム課に所属となる(ちなみに一人しかいない)。
好きな動物はペンギン🐧
都内にて一人飲酒業務に精を出していたが、諸事情により活動休止。
最近の趣味としては銭湯(含スーパー銭湯)に行く事と水族館に行く事。

Ryu Seino By Ryu Seino

最近の投稿

アーカイブ

カテゴリー

タグクラウド

コーポレートサイト

メタ情報