ワークブックをクライアントへ出力
作成したExcelファイルはサーバ側に保存するだけではなく、クライアントであるブラウザに対して出力することも可能です。クライアント側ではExcelファイルに対するリンクをクリックした時と同じようにファイルをExcelで開くかローカルに保存するかの選択ダイアログが表示されます。
まずSpreadsheet_Excel_Writerクラスのオブジェクトを作成する時に、引数のファイル名を指定せずに作成します。
<?php require_once("Spreadsheet/Excel/Writer.php"); $workbook = new Spreadsheet_Excel_Writer(); ?>
次にクライアントのブラウザに対してExcelファイル用のHTTPヘッダを送信します。Spreadsheet_Excel_Writerクラスで用意されているsendメソッドを使います。
void send (string $filename)
HTTP ヘッダに正しい content-type (application/vnd.ms-excel) とキャッシュ コントロール、そしてファイル名をつけて送信します。 パラメータ: $filename HTTP ヘッダで使用するファイル名
1番目の引数にはワークブックのファイル名を指定して下さい。
ソースファイルを確認すると、このメソッドを実行することによって次のようなヘッダが送信されます。
header("Content-type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=¥"$filename¥""); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0,pre-check=0"); header("Pragma: public");
実際には次のように記述します。
<?php require_once("Spreadsheet/Excel/Writer.php"); $workbook = new Spreadsheet_Excel_Writer(); $workbook->send('sample1-1.xls'); ?>
最後にワークブックを閉じます。Spreadsheet_Excel_Writer_Workbookクラスで用意されているcloseメソッドを使います。これはサーバ側に保存する場合と同じです。
<?php require_once("Spreadsheet/Excel/Writer.php"); $workbook = new Spreadsheet_Excel_Writer(); $workbook->send('sample1-1.xls'); $workbook->close(); ?>
このようにすることで、サーバ側でExcelファイルを保存する代わりにクライアントに対して作成したExcelファイルを出力することができます。
サンプルプログラム
では簡単なサンプルで試してみます。
<?php require_once("Spreadsheet/Excel/Writer.php"); $workbook = new Spreadsheet_Excel_Writer(); $workbook->send('sample4-1.xls'); $worksheet =& $workbook->addWorksheet('サンプル'); $workbook->close(); ?>
上記のファイルをWWWサーバのドキュメントルート以下に設置しブラウザからアクセスすると次のように表示されます。
今回は直接クライアントに対してExcelファイルを出力しているため、クライアントであるブラウザ側ではファイルを保存するかExcelなどのアプリケーションで開くのかを選択することになります(ブラウザによって挙動は違います)。いったんローカルに保存してからExcelで開いてみます。
Excelで利用可能なファイルとして出力されていることが確認できます。
( Written by Tatsuo Ikura )