omoonのブログ

旅の思い出を写真とともに書いてみるか。

Spreadsheet_Excel_Writer

Spreadsheet_Excel_Writerを使うと、PHPからExcelのファイルを出力できます。
開発中のウェブアプリで、CSV形式のデータをダウンロードできる機能は既にあるのだけれど、実際にはExcelで欲しいとの要望が多いので、導入検討してみる。

インストール

PEARにあるので、PEARからインストール。

pear install Spreadsheet_Excel_Writer

使う

話を分かりやすくするために、下のようなクラスを作成しました。
(ざっと書いたので、へぼへぼかも。ここ、こうしたらええで、とかあったら、ご教示願いたい。)

require_once 'Spreadsheet/Excel/Writer.php';

class excel {

	var $wb;
	var $sheet = array();

	function excel($name = NULL) {
		$this->wb = new Spreadsheet_Excel_Writer();
		$this->format =& $this->wb->addFormat();
		$this->format->setFontFamily('MS ゴシック');
		$this->format->setSize(10);
		if ($name) {
			$this->set_name($name);
		}
	}

	function set_name($name) {
		if (!ereg(".xls$", $name)) {
			$name .= '.xls';
		}
		$this->wb->send($name);
	}

	function add_sheet($key, $value = NULL) {
		if ($value == NULL) {
			$value = $key;
		}
		$this->sheet{$key} =& $this->wb->addWorksheet($value);
	}

	function set_data($s_key, $data) {
		$cnt = 0;
		foreach ($data as $row) {
			if ($cnt == 0) {
				$cnt_2 = 0;
				while(list($key, $val) = each($row)) {
					$this->sheet{$s_key}->writeString($cnt, $cnt_2, $key, $this->format);
					$cnt_2++;
				}
				$cnt++;
			}
			reset($row);
			$cnt_2 = 0;
			while(list($key, $val) = each($row)) {
				$this->sheet{$s_key}->writeString($cnt, $cnt_2, $val, $this->format);
				$cnt_2++;
			}
			$cnt++;
		}
	}

	function create() {
		$this->wb->close();
	}

}

要は、

$excel = new excel('test');
$excel->add_sheet('sheet1');
$excel->set_data('sheet1', $data);
$excel->create();

こんな感じで分かりやすくするため。

中途半端な公開ですみません。
こういう感じの日記を書いてみたかったのです。

あ、それと、PHPのバージョンは4でやってます。

参考:
http://www.doyouphp.jp/sample/sample_ora_excel_pear.shtml