LoginSignup
2
3

More than 5 years have passed since last update.

PHP5.2~でエクセル出力するライブラリ mk-j/php_xlsxwriter

Posted at

ライブラリについて

PHPでエクセル出力する場合、ライブラリにPHPExcelとかがあるが、だいぶ古くてもうすぐ更新されなくなる。
composerインストールできるものを探していると新しいのがあるが、PHP7必須だったりする。
PHP5.2以上だとmk-j/php_xlsxwriter というのがあった。

クラスファイル分けしてなくて、1ファイルに全機能が入っている。あまり機能充実はしていない。
特色としては、「Never run out of memory with PHPExcel again.」とうたっている。出力をバッファすることでPHPExcelみたいなメモリオーバーを防止しているよということらしい。

機能を見る

Readmeと同梱のexamples11例を見ると、だいたい使い方がわかる。

セルの結合は次のような書き方。
$writer->markMergedCell($sheet1, $start_row=0, $start_col=0, $end_row=0, $end_col=4);
文字列の折り返し表示はスタイルにwrap_text=>trueを指定する。
$writer->writeSheetRow($sheet4, array(101,'this text will wrap' ), $row_options = array('height'=>30,'wrap_text'=>true));

目的が果たせるのか確認していてソースを見ると、シンプルなXMLを出力していることがわかった。VBAとXMLで単語が統一されているのでわかりやすい。
Excelを作るXMLの仕様についてはこちらのサイトとかがとても役に立った。
https://p-space.jp/index.php/development/open-xml-sdk

たとえばセルの枠線は標準の機能で引けるが、(右上から左下などの)斜線を引くオプションがない。
(VBA)
BorderC7.DiagonalUp = new BooleanValue(true);
(XML)
<border diagonalUp="true">

みたいな書き方だとわかったので、該当の箇所を探して変更できた。

あとは行幅を文字列の長さで調節してほしい。
<col customWidth="true">
と書いている箇所があって、
VBAだと
ws.Column(1).AdjustToContents();
が該当する。
これはいろいろ触ってみたがわからなかった。。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3