system
高田 美里

2017.1.4システム開発 

システムエンジニア

高田 美里

[PHP] PHPExcelでExcelファイルを出力してダウンロードしてみよう(基本)

こんにちは。エンジニアの高田です。
今年ももう終わりですね。大人になると1年過ぎるのがほんと早く感じます。
今年も1年間お世話になりました。

さて今回は私にとってはいまさらですが、久しぶりにPHPExcelを触ることがあったので、
PHPExcelを使ってExcelファイルを出力し、ダウンロードする方法を紹介します。

PHPExcelとは

phpexcel_logo
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 require phpoffice/phpexcel

 
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は便利だけどメモリを食います。便利だけど重いとか遅いとか有名なライブラリです。
それを今まで使ってきてあれこれトラブルを経て、たどりついたおまじないなので入れておくのがオススメです。

それらはまた次回!ではまた。

システム開発サービスはこちら
ページTOPへ