« アルミ缶の上に | トップページ | さみぃ »

2006年2月 7日 (火)

Spreadsheet_Excel_Writer

発注時の話を越えた仕様を突っ込んできたり、「上流の設計はこっちでやりますから」とか言いつつ、穴だらけのフローとか作ってきて、結局こっちが全部確認しながら修正することになったり、そういったクライアントの無茶は嫌いなのだが、ITに造詣の深くない人のちょっとした無茶な要求は実現させるのが楽しい場合がある。結構ヒントになったりするし。

お世話になってる会社の経理のオネイサンに営業管理ツールでDBに溜め込んでいるデータを出力したいと言われた。ああ、じゃCSVでダンプすれば?それぐらいなら片手間でやりまっせ、と言ったところ、整形されていないといけないらしい。どうも見積書とかをオネイサンがちまちま作っているので、ある程度自動化したいと。んー、じゃ面倒だけどPDF吐きますか、と提案したところ、営業が備考欄とか修正できないといけないのでExcelがいいという?まじすか?システムでExcel吐けと?

で、調べてみると OpenOffice.org にOpenOffice.org's Documentation of the Microsoft Excel File FormatなるPDFがあるのですが、222ページの大作。BitだのMaskだのごちゃごちゃ書いてるので、やろうと思えばExcel吐けるんだなぁということは分かる。が、5年ほど前にPalmのスケジュールデータをhackしてた頃の気力は最早無し

やっぱ無理かねぇ、と色々探してるとPHPのPEARにSpreadsheet_Excel_Writerなるものがあると。betaというのが怪しいのだけどダメ元でチャレンジ。

これが案外使えてですね、オートシェイプ以外のことはほとんど出来ちゃいましたよ。数式入れたりするのも可。ということで、オネイサンに「凄いスゴイ」と言われて完了。いやぁ、RedHatからExcelが出ましたよ。感動してるの俺様だけかね?世間では常識かね?

ただ、betaだけあってドキュメントが貧弱貧弱U(以下略)なので、覚書。

・ setRow(行の高さ)は integer って書いてあるけど小数渡せるっぽい
・ setFontFamily('HGP創英角ゴシックUB'); なんて事が可能。内部的にFont名を文字列で持ってるんだねぇ。Portabilityを考えればそうか(Possible values are: 'Times New Roman', 'Arial', 'Courier'. なんて書いてあるけどね)
・ 日付のExcel内部での持ち方がなんだか変(Unix時間と25569日分ずれてる?)
・ Align は left<=center=>right 上下は top/bottom だが上下の中央揃えは vcenter
・ 左よりの上よりといったときは setAlign を重ねると実現可能
・ セル内で改行する時は "\n" で区切った文字列を setTextWrap(); したフォーマットで書き込む
・ 3桁ごとにコンマを入れるなら setNumFormat('#,##0;[Red]-#,##0');
・ 計算結果が0の時に表示しないなら setNumFormat('#,##0;[Red]-#,##0;');
・ 先頭に円マークをつけるなら setNumFormat('"\"#,##0;[Red]-#,##0');
・ マージンはインチで設定するのだけどExcelの印刷設定の余白はcm表示らしい(少なくとも日本語版は)。ので、1に設定したつもりがExcelでは2.5となるので割り算すべし。
・ 書式を横にするには setLandscape();
・ セル内で縦書きしたければ$f->setTextRotation(-1);
・ 色とか罫線はExcelの内部で対応番号があるみたいなので謎。for 文で一回書き出してみるべし。

for ($i=8; $i<57; $i++) {
 $f =& $workbook->addFormat(array('Size'=>14, 'FgColor'=>$i, 'Pattern'=>1));
 $worksheet->write(60+$i,1,$i,$f);
}

|

« アルミ缶の上に | トップページ | さみぃ »

てっく」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/232324/37749175

この記事へのトラックバック一覧です: Spreadsheet_Excel_Writer:

« アルミ缶の上に | トップページ | さみぃ »