PHPExcelをCakePHPで使ってみる

女姉妹や従妹が一人もいないので、晴れの日はいつも淡白です。

こんにちは。

さて今日は、最近戦っていた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文が複雑になったり、その他の要素で長いコードになっていたのですが、まとめるとこんな感じです。

参考にしてください。

おわりに

年末年始はいかがでしたか?

成人式やセンター試験も終わって、一月も半ばですね。

今年もどうぞよろしくお願いします。

それでは

聖。