2010年10月26日火曜日

PEAR Spreadsheet::Excel::Writer で印刷範囲を設定

PEARのドキュメントが不親切すぎて、何度 PHPExcel に乗り換えようと思ったことか。
でも PHPExcel は php 5.2 以上じゃないとダメなんだって。
運用中のサーバーで phpのバージョン上げるなんてできるわけもなく、泣く泣く Spreadsheet::Excel::Writer でちゃんと印刷できるような設定の仕方を模索します。

結論から書くと、

// A4指定
$sheet->setPaper(9);
// 出力方向:横向き
$sheet->setLandscape();
// 改ページ指定(テスト)
$sheet->setHPageBreaks(array(35,51,84,115));
// 印刷倍率
$sheet->setPrintScale(63);
// 出力範囲の指定
$sheet->printArea(0,0,144,32);

こんな感じ。
ちょっと横に広くて、縦にも何行あるか良くわからんようなデータの出力で使いました。
縦がどんだけの行数になろうが、横幅をA4横の1ページに収めるための倍率っていうのは、だいたい一意に決まるもので、これはページごとに違うけど、いちいち計算で出すよりは、ページごとに固定の定数で持つのが、たぶん現実的な回答。

んで、あと問題になりそうなのは、setHPageBreaks() の挿入位置。
ある程度定型のシート出力なら、固定で持ってもいいんだろうけど、あいにく、表の行数は変動するし、どこで切ればいいかなんて、あらかじめわかるもんではない。

なので、セルを書き込むときに、ある程度、「この表の下で改ページ」っていうのを決めておくか、「○行出力したら改ページ」みたいにしとくべきかと。

出来上がったワークブックは客に見せるので、縦に合わせて印刷倍率を変えるような事は絶対できない。横は紙いっぱいに印刷したいしね。

最後の printArea() は、全体の、出力する範囲を決める関数。その中に何ページ含まれるかなんてことは関係ない。
最初、この関数で範囲指定すれば、そこが1ページとして出力されるのかと思って、ちょこっとハマりました。

出力しては、エクセルで表示、ってのを繰り返して、これ以外ないだろう、っていう最終形です。

参考までに。

2010年10月21日木曜日

analyticsの仕様が少しわかってきた

ここ とか ここ とか。

っていうのは、ちょっとしたリンクのテストで。
Analyticsは基本的にページに埋め込まれたjavascriptでどこから来たかとかいろんな情報をgoogleに送るわけですが、

あとは、phpのバージョンが 5.1 なので、PHPExcelが使えない事が判明。
PEARのExcelWriterでなんとか印刷範囲の設定を行います。


後は明日かきます。

2010年10月4日月曜日

twitterのAPIが仕様変更しましたね。

新、っていっても、パラメータが追加されたとかそーいう変更が主体みたいだけど、先月くらいから、ウチのAPI叩いてるモジュールがエラーをはき始めて、なんだろう、と思ってたら、このAPIの仕様変更が原因でした。
少なめにパラメータを指定してtimelineを取得すると、それまでになかったデータが含まれるようになった。
そのせいで、データのパーサーがエラーで落ちてた、と。
まぁパーサーがヘボかった、っていうのはあるんだけど、それにしてもなぁ。仕様変更したらもうちょっと多きく告知してよ、twitterさん。

にしても英語でblog書くのって疲れる。
もうちょっと勉強せねばなぁ。

2010年9月29日水曜日

php + xmlrpc => WordPress [en]

I tried to build application post to WordPress through XMLRPC-API using php and xmlrpc modules.
Almost works good, but i just have a little trouble when setting up categories to posted articles.
XMLRPC-API accepts categoryName instead of categoryID.

My site has auto post system to many SNSes and have arrays of IDs which category to post.
So, i have to use API named 'mt.getCategoryList' everu time posting any articles.
It's so silly process >o<.

Have a good day.

* Thanks.

2010年9月22日水曜日

convert SimpleXMLElement Object to standard class Object.

$stdObj = unserialize(str_replace('O:16:"SimpleXMLElement"', 'O:8:"stdClass"', serialize($xmlElement)));

シリアライズしたら何でもかんでも文字列表現になるので、ちょちょいと。

いろいろ試したけど、これが一番お手軽!

2010年8月30日月曜日

ubuntu 10.04 + emobile D02HW

まず結論。
ううまくいきません。

USBに接続してもデバイスを認識せず。ストレージとしては認識できてるから、何かあるんだろうね。
ノートにubuntu入れてモバイル通信できる環境にしたいのに、全然無理ッス。
とりあえず、野良wlanポイント探すしか。

twitter::update_profile_image で 500エラー

うーん。最新版のtwitterライブラリに更新したらLIST機能が使えたのは僥倖。

しかし、プロフィール画像の更新がうまくいかない。
関数は、画像ファイルへのパスを渡して呼び出すだけの簡単仕様。
なのに、呼び出しても 「500 Internal server error」が返ってくるだけで更新されない。
Google先生によると、うまくできてる例はいっぱいあるのに。

ライブラリのバグかなぁ・・・・?