CakePHP1.3.6:PHPExcelをつかってみる(簡単なコントローラーを作成する編)。
2009年のマイコミジャーナルの記事を参考にすれば、とっても簡単にExcelを動的に生成して、ダウンロードさせることができる。
Excel2007形式でダウンロード
以下のようなフォーマット(見出しとシート名)をテンプレートとしてよみこんで、簡単な見積書のダウンロードを作ってみる。
コントローラーは以下。上のテンプレートを、webroot/tmp/template.xslxとして保管してある。
<?php require_once '../vendors/phpexcel/phpexcel.php'; class ExcelSamplesController extends AppController{ public $name = 'ExcelSamples'; public $uses = array(); /** * * 初期画面(一覧表示) */ function index(){ $this->autoRender = false; // Viewを使わない Configure::write('debug', 0); // debugコードを出さない //Templateを読み込んで、PHPExcelオブジェクトを生成する $reader = PHPExcel_IOFactory::createReader('Excel2007'); $xl = $reader->load('tmp/template.xlsx'); //シートの設定 $xl->setActiveSheetIndex(0); $sheet = $xl->getActiveSheet(); //セルの値を設定 $sheet->setCellValue('b3', '山川商事株式会社様'); $sheet->setCellValue('b4', '東京都品川区xxx町xxx-xxx'); $sheet->setCellValue('c8', 'パソコン一式'); $sheet->setCellValue('e8', 10000); //スタイルの設定(標準フォント、罫線、中央揃え) $sheet->getDefaultStyle()->getFont()->setName('MS Pゴシック'); $sheet->getDefaultStyle()->getFont()->setSize(11); $sheet->getStyle('b3')->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); //Excel2007形式で保存 $writer = PHPExcel_IOFactory::createWriter($xl, 'Excel2007'); $writer->save("tmp/output.xlsx"); /* * 2007形式でダウンロード */ header ("Content-disposition: attachment; filename=output.xlsx"); header ("Content-type: application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; name=output.xlsx"); $out = file_get_contents("tmp/output.xlsx"); return($out); } } ?>
これで、ExcelSamplesにアクセスすると以下のようにダウンロードが開始される。
中身は以下。
Excel95-2003形式でダウンロード
Excel95-2003形式でダウンロードするには、以下。テンプレートを95-2003形式で作成しておく。
<?php require_once '../vendors/phpexcel/phpexcel.php'; class ExcelSamplesController extends AppController{ public $name = 'ExcelSamples'; public $uses = array(); /** * * 初期画面(一覧表示) */ function index(){ $this->autoRender = false; // Viewを使わない Configure::write('debug', 0); // debugコードを出さない //Templateを読み込んで、PHPExcelオブジェクトの生成 $reader = PHPExcel_IOFactory::createReader('Excel5'); $xl = $reader->load('tmp/template.xls'); //シートの設定 $xl->setActiveSheetIndex(0); $sheet = $xl->getActiveSheet(); //セルの値を設定 $sheet->setCellValue('b3', '山川商事株式会社様'); $sheet->setCellValue('b4', '東京都品川区xxx町xxx-xxx'); $sheet->setCellValue('c8', 'パソコン一式'); $sheet->setCellValue('e8', 10000); //スタイルの設定(標準フォント、罫線、中央揃え) $sheet->getDefaultStyle()->getFont()->setName('MS Pゴシック'); $sheet->getDefaultStyle()->getFont()->setSize(11); $sheet->getStyle('b3')->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); //Excel95形式で保存 $writer = PHPExcel_IOFactory::createWriter($xl, 'Excel5'); $writer->save("tmp/output.xls"); /* * 95-2003形式でダウンロード */ header ("Content-disposition: attachment; filename=output.xls"); header ("Content-type: application/octet-stream; name=output.xls"); $out = file_get_contents("tmp/output.xls"); return($out); } } ?>
試しにPDF形式でダウンロード
PDF形式でダウンロードするには、以下。
<?php require_once '../vendors/phpexcel/phpexcel.php'; class ExcelSamplesController extends AppController{ public $name = 'ExcelSamples'; public $uses = array(); /** * * 初期画面(一覧表示) */ function index(){ $this->autoRender = false; // Viewを使わない Configure::write('debug', 0); // debugコードを出さない //Templateを読み込んで、PHPExcelオブジェクトの生成 $reader = PHPExcel_IOFactory::createReader('Excel2007'); $xl = $reader->load('tmp/template.xlsx'); //シートの設定 $xl->setActiveSheetIndex(0); $sheet = $xl->getActiveSheet(); //セルの値を設定 $sheet->setCellValue('b3', '山川商事株式会社様'); $sheet->setCellValue('b4', '東京都品川区xxx町xxx-xxx'); $sheet->setCellValue('c8', 'パソコン一式'); $sheet->setCellValue('e8', 10000); //スタイルの設定(標準フォント、罫線、中央揃え) $sheet->getDefaultStyle()->getFont()->setName('MS Pゴシック'); $sheet->getDefaultStyle()->getFont()->setSize(11); $sheet->getStyle('b3')->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); //pdf形式で保存 $writer = PHPExcel_IOFactory::createWriter($xl, 'PDF'); $writer->setFont('arialunicid0-japanese'); $writer->save("tmp/output.pdf"); /* * pdf形式でダウンロード */ header ("Content-disposition: attachment; filename=output.pdf"); header ("Content-type: application/pdf; name=output.pdf"); $out = file_get_contents("tmp/output.pdf"); return($out); } } ?>
ただし、この場合、以下のようなPDFになってしまう。これはちょっと使えない。方法はあるんでしょうね。