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アクションが呼ばれた時にダウンロードダイアログが表示されるようになります。
