インソースマーケティングデザイン
2017.01.04 システム
[PHP] PHPExcelでExcelファイルを出力してダウンロードしてみよう(基本)
こんにちは。エンジニアの高田です。
今年ももう終わりですね。大人になると1年過ぎるのがほんと早く感じます。
今年も1年間お世話になりました。
さて今回は私にとってはいまさらですが、久しぶりにPHPExcelを触ることがあったので、
PHPExcelを使ってExcelファイルを出力し、ダウンロードする方法を紹介します。
PHPExcelとは
PHPExcelとは、PHPでExcelファイルを生成することができるライブラリです。
もちろん読み込みも書き込みも可能です。
テンプレートとなるファイルを準備して、そのファイルを読み込み、データを設定して出力することもできれば、1からファイルを作成し、そこにデータを設定して出力することもできます。
PHPExcelのインストール
以下のサイトからダウンロードしてきて、自分自身のPHPプロジェクトに設置することもできれば、Composerからインストールすることも可能です。
<ダウンロードでインストールする>
以下のサイトの右側の「download」ボタンから、ダウンロードします。「PHPExcel_1.8.0_doc.zip」
PHPExcel:https://phpexcel.codeplex.com/
ダウンロードしたファイルを解凍し、これらのファイルを任意のフォルダに格納すればインストール完了です。
PHPExcel本体は「Classes」フォルダに入っています。使用する際は、使用時はこのフォルダ内にある PHPExcel.php を require します。
// PHPExcelの読み込み
require_once("./Classes/PHPExcel.php");
<Composerでインストールする>
Composerでインストールした場合はautoload.phpをrequireします。
require_once __DIR__ . '/vendor/autoload.php';
PHPExcelでExcelを出力してダウンロード
// キャッシュメモリ設定(デフォルト:1MB → 256MB)
// ※キャッシュを有効にした場合、列の挿入(insertNewColumnBefore)・削除(removeColumn)、行の挿入(insertNewRowBefore)・削除(removeRow)が正常に動作しないため注意すること!!
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array('memoryCacheSize' => '256MB');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
// Excelファイルの新規作成
$objExcel = new PHPExcel();
// シートの設定
$objExcel->setActiveSheetIndex(0);
$objSheet = $objExcel->getActiveSheet();
// A1セルに「テスト」という文字列を設定
$objSheet->setCellValue('A1', 'テスト');
// Excelファイルのダウンロード
$objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel2007');
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=" . "TestDownload.xlsx");
header("Content-Transfer-Encoding: binary ");
$objWriter->save('php://output');
// メモリの開放
$objExcel->disconnectWorksheets();
unset($objWriter);
unset($objSheet);
unset($objExcel);
これでExcelファイルが出力されるはずです。
値を入れるだけではなく、罫線引いたり、色をつけたり、結構色々とできるんですよ。
最初と最後のところにメモリ系の処理が入っていますが、PHPExcelは便利だけどメモリを食います。便利だけど重いとか遅いとか有名なライブラリです。
それを今まで使ってきてあれこれトラブルを経て、たどりついたおまじないなので入れておくのがオススメです。
それらはまた次回!ではまた。