PHPでエクセルを読んだり書き出したりできるライブラリPHPExcelをもりもり触っているのですが、主にグラフィカルな部分で出来ないこともあるようなので、そのメモ(2014/07/10現在)
割と色々出来るPHPExcel
エクセルの、特にセルの操作に関しては、出来ない事はないんじゃないかと思わせるぐらい何でも出来るPHPExcelですが、さすがに完璧では無いようで出来ない(機能的に弱い)所もありますので、挙げていきます。
ある程度フォーマットされたエクセルを読み込んで、数値を書き出して、新たに生成する、ような利用方法を想定します。
条件付き書式は、エラーで消える
読み込むエクセルに、条件付き書式があると、一見正常に生成されるのですが、開こうとすると、以下のようなエラーが発生し、
Saveを選択すると、次はこのアラート
言われるがまま修理して開くを選ぶと、以下のような条件付き書式部分が
消えてしまいます。
消えるのは、グラフだけで、背景の色は大丈夫。
chartがあると、エラーで消える
読み込むエクセルにchartがあると、上記と同様のエラーが発生し、chart部分が丸々消えます。なので、chart付きエクセルを生成したい場合、chart部分は全てPHPExcelで書き出す必要があります。
(※PHPExcelで書き出したchart付きエクセルを、再度読み込んでそのまま書き出して見ても同じエラーがでました。)
chart生成時の細かいレイアウト調整は出来ない部分も
chartですが、エクセルではかなり細かいレイアウト調整が出来るのですが、PHPExcelでは同等の機能までは提供できていないようです。
分かっている範囲では、
y座標を2つ設定
このように、y座標を2つを設置することが出来ません。
ここで、PHPExcelのオーナーのMark Baker氏が
At this point in time, PHPExcel doesn’t support secondary axes in charts
とコメントしており、また、機能として提供予定という情報も見つからないので、出来るようになるかも不明です。
y座標の表示範囲の指定
今y座標の表示範囲は表示データから自動で決められます。それはそれですごい便利なのですが、変更したい場合の指定オプションはありません。(ありそうだけど、そういう機能をまだ見つけれていません。)
2年も前ですが、Mark Bakerが、そういうスタイルオプションは無いとコメントしてました。
y座標(y-axis)のラベルのレイアウト変更
デフォルトでy座標のラベルはこのように
90度回転した向きでグラフの横にあるのですが、この向き、または位置を変更出来ませんでした。
これは一見出来そうだし、ソースを見てもそれっぽい機能があるのですが、こんな感じで色々試したり
$layout = new PHPExcel_Chart_Layout(array( 'x'=>'0.9' ,'y'=>'50.0' ,'yMode'=>'Horizontal' // 何を入れて良いか分からない。。。。 ,'xMode'=>'adge' // 掲示板で見つけた'adge'を試したが変わらない。。。。 )); $layout->setHeight(50); $yAxisLabel = new PHPExcel_Chart_Title('Value ($k)',$layout);// 効果無し
サンプルソース全部見てみましたが、それでも解決できませんでした。
とは言いつつも結構出来るPHPExcel
こういう書き方だとPHPExcelあかんやんと思われそうですが、PHPExcelはほんとすごいです。弱いって言ってるchart機能も、サンプルプログラムで書けるグラフ全部貼付けてこんだけ出来るぞーと言いたいぐらい、色々出来ますし、最初にも言った通りセル操作に関しては、今のところほとんど困らないほど高機能です。興味あれば触ってみてください。
そして、あまり日本語情報が見つからないので、一緒に情報共有していきましょう!