既に色々なライブラリや参考WEBサイトがありますが、備忘録として。。
※参考
http://d.hatena.ne.jp/saicologic/20080606/1212715767
http://www.syuhari.jp/blog/archives/1621
http://journal.mycom.co.jp/articles/2009/03/06/phpexcel/index.html
以下、PHP Excel + Zend Frameworkの例です。
ここやここなんかを参考にPHP Excelのダウンロードと展開、パスの設定。
Excel95形式(.xls)を扱う限りはphp_zipは必要なさそうです。
PHP Excelに身を委ねてExcelファイルを生成。
生成した一時ファイルを返却。
Content-Typeは「application/vnd.ms-excel」らしい。
include 'PHPExcel.php'; class ExcelController extends Zend_Controller_Action { public function testAction() { // 一時ファイル $fileName = '/tmp/output.xls'; $excel = new PHPExcel(); // シートの設定 $excel->setActiveSheetIndex(0); $sheet = $excel->getActiveSheet(); $sheet->setTitle('sheet name'); // セルに値を入れる $sheet->setCellValue('A1', 'あいうえお'); // Excel95 形式で出力 $writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5'); $writer->save($fileName); // ホントはファイル出力せずにバイナリで返して欲しい // ダウンロード $this->getResponse() ->setHeader('Content-Type', 'application/vnd.ms-excel') ->setHeader('Content-Disposition', 'attachment; filename="test.xls"') ->appendBody(file_get_contents($fileName)) ->sendResponse(); exit; } }
こんな感じで、
example.com/excel/test/
にアクセスでtest.xlsのダウンロード。
========================
2010/06/27追記
IEの場合、キャッシュ関係のヘッダがないとダウンロードできないらしい。
Pragmaヘッダが無いと、「このインターネットサイトを開くことができませんでした。要求されたサイトが使用できないか、見つけることができません。後でやり直してください。」とのエラー。
include 'PHPExcel.php'; class ExcelController extends Zend_Controller_Action { public function testAction() { // 一時ファイル $fileName = '/tmp/output.xls'; $excel = new PHPExcel(); // シートの設定 $excel->setActiveSheetIndex(0); $sheet = $excel->getActiveSheet(); $sheet->setTitle('sheet name'); // セルに値を入れる $sheet->setCellValue('A1', 'あいうえお'); // Excel95 形式で出力 $writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5'); $writer->save($fileName); // ホントはファイル出力せずにバイナリで返して欲しい // ダウンロード $this->getResponse() ->setHeader('Content-Type', 'application/vnd.ms-excel') ->setHeader('Content-Disposition', 'attachment; filename="test.xls"') ->setHeader('Cache-Control', 'no-cache') // IE ->setHeader('Pragma', 'no-cache') // IE ->appendBody(file_get_contents($fileName)) ->sendResponse(); exit; } }
========================
2010/07/10追記
atachementのfilenameはそのまま送出するとブラウザによって文字化けする。
※参考
http://oku.edu.mie-u.ac.jp/~okumura/php/filename.php
http://d.hatena.ne.jp/guangda/20100106/1262762061
http://d.hatena.ne.jp/guccyon/20080530/p1
とりあえず、お手軽安全なのはSJISに変換か。。
Win環境以外は知らないことにしよう。
// ダウンロード $fileName = mb_convert_encoding($fileName, 'SJIS'); $this->getResponse() ->setHeader('Content-Type', 'application/vnd.ms-excel') ->setHeader('Content-Disposition', 'attachment; filename="' . $fileName . '"') ->setHeader('Cache-Control', 'no-cache') // IE ->setHeader('Pragma', 'no-cache') // IE ->appendBody(file_get_contents($fileName)) ->sendResponse();
0 件のコメント:
コメントを投稿