概要
PHPExcelを使って、CakePHPでExcel出力してみる。下記URLを参考にした。
http://bakery.cakephp.org/articles/melgior/2010/01/26/simple-excel-spreadsheet-helper
CakePHP2.2.6を利用。
PHPExcelを落とす
下記URLからPHPExcelを落としてくる。
解凍した中のClassesフォルダ配下(PHPExcel.phpとPHPExcel)を、app/Vendorフォルダの中に移す。
Behaviorを書く
冒頭で紹介したサンプルサイトと以前使ったCSVExportBehaviorを参考にして、なんとなくそれっぽいBehaviorを書いてみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<?php App::import('Vendor','PHPExcel',array('file' => 'PHPExcel.php')); App::import('Vendor','PHPExcelWriter',array('file' => 'PHPExcel/Writer/Excel5.php')); class ExcelExportBehavior extends ModelBehavior { protected $xls; protected $sheet; protected $tmpDir = 'excelExport'; public function setup(Model $Model, $settings = array()) { $this->xls = new PHPExcel(); $this->sheet = $this->xls->getActiveSheet(); $this->sheet->getDefaultStyle()->getFont()->setName('MS Pゴシック'); if (!isset($this->settings[$Model->alias])) { $this->settings[$Model->alias] = array( ); } $this->settings[$Model->alias] = array_merge($this->settings[$Model->alias], $settings); } public function exportExcel(Model &$Model) { $records = $Model->find('all'); foreach($records as $rowIdx => $row ) { foreach($row as $model) { $fieldIdx = 0; foreach($model as $value) { $this->sheet->setCellValueByColumnAndRow($fieldIdx++, $rowIdx, $value ); } } } $tmpDir = TMP . $this->tmpDir; if ( !file_exists($tmpDir ) ) { mkdir( $tmpDir, 0777); } $tmpFilename = TMP . $this->tmpDir . DS . strtolower( Inflector::pluralize($Model->alias) ) . '-' . date('Ymd-Hms') . '.excel'; $objWriter = new PHPExcel_Writer_Excel5($this->xls); $objWriter->save($tmpFilename); $data = file_get_contents( $tmpFilename ); if ( file_exists( $tmpFilename ) ) { unlink( $tmpFilename ); } return $data; } } |
Modelを書く
作ったBehaviorをModelのactsAsに追加する。
1 |
public $actsAs = array( 'ExcelExport' ); |
Controllerを書く
Controllerに呼び出す用の関数を追加する。
1 2 3 4 5 6 7 |
public function excel() { $this->autoRender = false; $modelClass = $this->modelClass; $this->response->type('Content-type: application/vnd.ms-excel'); $this->response->download( 'hoge.xls' ); $this->response->body( $this->$modelClass->exportExcel() ); } |
これで当該のControllerの関数を呼び出すと、Modelの情報がExcelに出力された。
The following two tabs change content below.

masato watanabe
もふもふ部ブレーン。プログラマ兼ライター。

最新記事 by masato watanabe (全て見る)
- CakePHPでExcel出力してみる - 2013年2月5日
- CakePHPでテーブルの情報をCSVに吐いたり読んだりしてみる - 2013年2月1日
- CakePHPのModelの動きを論理削除にしてみる - 2013年2月1日