Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

ライブラリについて

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));

https://github.com/mk-j/PHP_XLSXWriter/blob/master/examples/ex08-advanced.php

目的が果たせるのか確認していてソースを見ると、シンプルな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();
が該当する。
これはいろいろ触ってみたがわからなかった。。

hanoopy
PHPプログラマー。 iPhone開発勉強中。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away