PHPExcelの導入
開発環境:CakePHP2.5.1
ExcelにDBのデータを表示して一覧を作ったり、請求書などのフォーマットがあるExcelに対してデータを表示させたりするには、PHPでExcelを簡単に扱うことができるPHPExcelが便利です。
そのPHPExcelの使い方を見ていきましょう。
PHPExcelの準備
まずはPHPExcelをダウンロードします。
http://phpexcel.codeplex.com/
(バージョンは1.8.0)
ダウンロードしたファイルを解凍し、Classesフォルダをphpexcelにリネームします。
そして、phpexcelフォルダをapp/Vendor/以下に設置します。
読み込み用のExcelを準備
読み込むExcelファイルを設置します。
場所は呼び出す時のパスを変更すればどこでもいいのですが、今回はapp/tmp/以下にphpexcelフォルダを作成し、その中にtemplate.xlsを配置します。
Controllerの設定
ここまでで下準備は完了ですので、ここからコードを書いていきます。
まずは、コントローラー側の設定になります。
excelアクションを呼び出すとExcelファイルがダウンロードできる仕組みにします。
<?php public function excel() { $this->layout = ''; $data = $this->Post->findById(1); $this->set('data', $data); }
Viewの設定
続いてビュー側です。
こちらで最初に設置したPHPExcelを呼び出します。
<?php App::import('Vendor', 'PHPExcel_Writer_IWriter', array('file' => 'phpexcel/PHPExcel/Writer/IWriter.php')); App::import('Vendor', 'PHPExcel_Writer_Abstract', array('file' => 'phpexcel/PHPExcel/Writer/Abstract.php')); App::import('Vendor', 'PHPExcel_Writer_Excel5', array('file' => 'phpexcel/PHPExcel/Writer/Excel5.php')); App::import('Vendor', 'PHPExcel_Reader_Excel5', array('file' => 'phpexcel/PHPExcel/Reader/Excel5.php')); $objReader = PHPExcel_IOFactory::createReader("Excel5"); // テンプレートのExcelの読み込み $template = TMP . 'phpexcel/'; $template_path = $template . 'template.xls'; $PHPExcel = $objReader->load($template_path); // シートの指定 一番左のシートから0、1、2・・・ $PHPExcel->setActiveSheetIndex(0); $sheet = $PHPExcel->getActiveSheet(); // データ表示 //$sheet->setCellValue('セル番号', 'データ'); $sheet->setCellValue('A1', $data['Post']['id']); // 保存ファイル名 $filename = 'output.xls'; Configure::write('debug', 0); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment;filename="' . $filename . '"'); header('Cache-Control: max-age=0'); $objWriter = new PHPExcel_Writer_Excel5($PHPExcel); $objWriter->save('php://output');
これでexcelアクションが呼ばれた時にダウンロードダイアログが表示されるようになります。