女姉妹や従妹が一人もいないので、晴れの日はいつも淡白です。
こんにちは。
さて今日は、最近戦っていたPHPExcelについて書こうと思います。
CakePHPでPHPExcelを使うには、
https://blog.s-giken.net/310.html
こちらのページが非常に参考になりました。
これで「/tmp」フォルダのExcelファイルを読み込み、セルにデータを上書きし出力することが出来ます。
今回はさらにMYSQLのデータをエクセルに反映させ、ダウンロード出来るようにします。
やることはシンプルです。
SQL文を書く→SQL文を実行する→データを配置する
これを足すだけです。
全体のサンプルのコードを貼ります。
//サンプル
public function sample($id = null)
{
//PHPExcelファイルの読み込み
include_once ( dirname(__FILE__) . ‘/Classes/PHPExcel.php’);
include_once ( dirname(__FILE__) . ‘/Classes/PHPExcel/IOFactory.php’);// 入出力の情報設定
$driPath = realpath(TMP) . “/excel/”;
$inputPath = $driPath . “sample_template.xlsx”;
$sheetName = “Sheet1”;
$outputFile = “sampleOutput_” . $id . “.xlsx”;
$outputPath = $driPath . $outputFile;// Excelファイル作成
$reader = PHPExcel_IOFactory::createReader(‘Excel2007′);
$book = $reader->load($inputPath);
$sheet = $book->getSheetByName($sheetName);//SQL文
$sample_sql=’SELECT文’//SQL文を実行する
$this->Samples = ConnectionManager::get(‘default’);
$sample_data = $this->Samples ->execute($sample_sql)->fetchAll(‘assoc’);// データを配置
$sheet->fromArray($sample_data, null, ‘A1’);
$sheet->setTitle(‘サンプル用’);// ダウンロード
header(‘Content-Type: application/octet-stream’);
header(‘Content-Disposition: attachment;filename=”‘ . $outputFile . ‘”‘);
header(‘Cache-Control: max-age=0’);$book->setActiveSheetIndex(0);
$writer = PHPExcel_IOFactory::createWriter($book, ‘Excel2007’);
$writer->save(‘php://output’);
exit;
}
データを配置する際、
$sheet->setCellValue(“A1”,“A1に書く”);
という方法もありますが、
$sheet->fromArray($sample_data, null, ‘A1’);
でデータを列に並べて、配置することもできます。データベースで扱うデータ量は大きいのでお勧めです。
実際にはSQL文が複雑になったり、その他の要素で長いコードになっていたのですが、まとめるとこんな感じです。
参考にしてください。
おわりに
年末年始はいかがでしたか?
成人式やセンター試験も終わって、一月も半ばですね。
今年もどうぞよろしくお願いします。
それでは
聖。