書式とは、Spreadsheet_Excel_Writer_Format 型の オブジェクトのことです。スプレッドシート内のセルに書式を適用することで、 書式のプロパティ (テキスト配置・背景色・フォントの色など…) を引き継ぐことができます。
書式を直接 new で作成することはできません。 書式を作成するには、ワークブックの addFormat() メソッドを使用する必要が あります。このメソッドは、ワークブックに書式を関連付けます (関連づけた書式を別のワークブックで使用することはできません)。
addFormat() の使用法を見てみましょう。
addFormat の使用法
<?php
require_once 'Spreadsheet/Excel/Writer.php';
// ワークブックを作成します。
$workbook = new Spreadsheet_Excel_Writer();
// 書式を作成します。
$format_bold =& $workbook->addFormat();
$format_bold->setBold();
?>
ここでは、太字の書式を作成しました。書式を作成する際にアンパサンド符号 (&) が使われていることに注意しましょう。このようにしなければ、 その後にする書式プロパティはすべて無視されます。
書式を作成してみたものの、まだそれを使用していません。これはまずいですね。 さあ、この書式を使ってみましょう。
通常のデータが埋められたスプレッドシートを作成したとしましょう。 きれいに出来上がった作品を誇らしげに上司に見せに行ったときに、 恐れていたことが起こりました。
いやな上司 - ふむ、悪くないね。
あなた - ええ。指示されたとおりの合計欄を 追加しました。
いやな上司 - ふむ、知っているとは思うが、 このスプレッドシートはいろんなお客様がご利用になるんだよね……
あなた - それで……
いやな上司 - ふむ、この辺のヘッダの スタイルをちょっと変えてみたらどうだろう?
あなた - ……
もちろん、ことはヘッダだけにとどまらないでしょう。「ここの表題は センタリングしてくれないか?」「このセルをあっちのほうと連結して ほしいんだけど?」「このへんの表題には会社のイメージカラーを 使ってみたらどうだろう?」
これらの状況に対応するための方法はいくつかありますが、この チュートリアルでは、仕事をこなすためにその中のひとつだけを 取り上げます。
それでは、DotCom.com 用のスプレッドシートを作ってみましょう。
最初の例
<?php
require_once 'Spreadsheet/Excel/Writer.php';
$workbook = new Spreadsheet_Excel_Writer();
$format_bold =& $workbook->addFormat();
$format_bold->setBold();
// データを書き込むためのワークシートが必要です。
$worksheet =& $workbook->addWorksheet();
// これが表題です。
$worksheet->write(0, 0, "Dotcom.Com の収益", $format_bold);
// そしてこれがデータです。
$worksheet->write(0, 0, 0);
?>
さあ、あちこちの投資家たちが DotCom.com に投資したいと連絡して来ました。 でもちょっと待ってください。彼らはそんじょそこらの投資家ではありません。 たまたまインターネットで見かけたスタートアップ企業にそう簡単に貴重なお金を 投資することはないでしょう。というわけで、もう少し会社の色を出してみましょう!
2 番目の例
<?php
require_once 'Spreadsheet/Excel/Writer.php';
$workbook = new Spreadsheet_Excel_Writer();
$format_bold =& $workbook->addFormat();
$format_bold->setBold();
$format_title =& $workbook->addFormat();
$format_title->setBold();
$format_title->setColor('yellow');
$format_title->setPattern(1);
$format_title->setFgColor('blue');
$worksheet =& $workbook->addWorksheet();
$worksheet->write(0, 0, "Dotcom.Com の四半期ごとの収益", $format_title);
// もっといろいろな数字を載せましょう
$worksheet->write(1, 0, "四半期", $format_bold);
$worksheet->write(1, 1, "収益", $format_bold);
$worksheet->write(2, 0, "Q1");
$worksheet->write(2, 1, 0);
$worksheet->write(3, 0, "Q2");
$worksheet->write(3, 1, 0);
$workbook->send('test.xls');
$workbook->close();
?>
先ほどの例を試してみるとわかるように、表題を正しく表示するには 何個かのセルが必要です。しかし、書式指定は最初のセルにしか 効いていません。そのため、表題の見栄えがあまりよくありません。
これを何とかするにはどうすればいいでしょう? そう、上司にこう言うのです。 「私にはきれいに表示されているように見えますよ。いちど眼科に行ったほうが いいのではないですか?」それがいやなら、表題がいくつかのセルに またがって表示されるよう、セルを連結しましょう。
そのためには、引数に 'merge' を指定して setAlign() メソッドを使用します。そして 空のセルをいくつか用意することで、表題セルがそれを背景として「使用」 できるようにします (将来のバージョンの Spreadsheet_Excel_Writer では、これを もうすこしうまいやり方でできるようにする予定です)。
例で示したスクリプトにセルの連結を適用するには、このようにします。
セルの連結
<?php
require_once 'Spreadsheet/Excel/Writer.php';
$workbook = new Spreadsheet_Excel_Writer();
$format_bold =& $workbook->addFormat();
$format_bold->setBold();
$format_title =& $workbook->addFormat();
$format_title->setBold();
$format_title->setColor('yellow');
$format_title->setPattern(1);
$format_title->setFgColor('blue');
// 連結します。
$format_title->setAlign('merge');
$worksheet =& $workbook->addWorksheet();
$worksheet->write(0, 0, "Dotcom.Com の四半期ごとの収益", $format_title);
// 空のセルの見栄えをよりよくします。
$worksheet->write(0, 1, "", $format_title);
$worksheet->write(0, 2, "", $format_title);
$worksheet->write(1, 0, "四半期", $format_bold);
$worksheet->write(1, 1, "収益", $format_bold);
$worksheet->write(2, 0, "Q1");
$worksheet->write(2, 1, 0);
$worksheet->write(3, 0, "Q2");
$worksheet->write(3, 1, 0);
$workbook->send('test.xls');
$workbook->close();
?>