ここでは、PHPExcel のセットアップからテンプレートファイルの読み込みまでについの解説を掲載しています。
スポンサーリンク
PHPExcel をセットアップ
Windows ( PHP-5.3.5 ) に対して PHPExcel-1.7.6 をセットアップするものとします。
ダウンロード
ダウンロード元:PHPExcel
現在 ( 2016-03-24 時点 ) の最新は、PHPExcel 1.8.0 のようです。
PHPExcel を利用する条件
| PHP バージョン | 5.2.0 以上 |
|---|---|
| PHP 拡張 | php_zip, php_xml, php_gd2 が有効であること |
※ Windows の場合は、php_zip のバグが解消されている PHP 5.2.9 以上が安心です
※ php_zip はExcel2007 形式を使用する場合に限り必要となります
セットアップ
ダウンロードした zip ファイルを解凍してできたフォルダの中の Classes フォルダを任意の位置に配置します。そして、php.ini の include_path に Classes フォルダのパスを設定します。これで、PHPExcel を使用できるようになりました。なお、個々の PHP スクリプトから直接パスを指定する場合にはこの設定も不要です。
動作確認
動作確認は Web サーバ経由で行います。以下の PHP スクリプトを実行してブラウザで Excel ファイルをダウンロードできれば OK です。
include_once 'PHPExcel.php';
include_once 'PHPExcel/IOFactory.php';
// Excel 97-2003 形式で作成し、ブラウザで開く
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="excel97-2003.xls"');
header('Cache-Control: max-age=0');
$excel = new PHPExcel();
// 1番目のシートに書き込みを行う
$excel->setActiveSheetIndex(0);
$excel->getActiveSheet()->setCellValue('A1', 'PHPExcel 動作確認');
// Excel2007形式の場合は、第2パラメータに 'Excel2007' を指定する
$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5');
// ブラウザに出力
$writer->save('php://output');
// ファイルに出力する場合は、パスを指定すし、前述の header 関数は全て削除する
//$writer->save('path/to/excel.xls');
テンプレートファイルの読み込み
次にテンプレートファイルとして、既に存在する Excel ファイルを読み込む方法について説明します。テンプレートファイルの読み込みには、拡張子からファイル形式を推測して読み込む方法と、テンプレートファイルのファイル形式を指定して読み込む方法があります。
拡張子からファイル形式を推測して読み込む
PHPExcel_IOFactory::load メソッドの使用することで拡張子からファイル形式を推測してテンプレートファイルを読み込むことができます。読み込み可能な拡張子は下表の通りです。
| 拡張子 | 対応する Reader |
|---|---|
| xls | PHPExcel_Reader_Excel5 |
| xlsx | PHPExcel_Reader_Excel2007 |
| ods | PHPExcel_Reader_OOCalc |
| slk | PHPExcel_Reader_SYLK |
| xml | PHPExcel_Reader_Excel2003XML |
| gnumeric | PHPExcel_Reader_Gnumeric |
| csv | – |
※ 上記の対応表で csv の Reader が入っていないが、Excel は全ての csv ファイルを含んでいるとの理由により csv ファイルに関しては直接 PHPExcel_Reader_CSV を使用する必要があります。
サンプルスクリプト
// テンプレートファイルのパス
$template_path = 'path/to/template.xls';
$excel = PHPExcel_IOFactory::load($template_path);
// Excel 97-2003 形式で作成し、ブラウザで開く
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="excel97-2003.xls"');
header('Cache-Control: max-age=0');
// Excel97-2003形式で出力する
$writer = PHPExcel_IOFactory::createWriter($excel, "Excel5");
$writer->save('php://output');
ファイル形式を指定して読み込む
ファイル形式を直接指定してテンプレートファイルを読み込むには、PHPExcel_IOFactory::load ではなく、Reader を直接指定して作成します。前述のサンプルとの変更点のみの掲載になります。
//$excel = PHPExcel_IOFactory::load($template_path); // コメントアウト
// Excel2003 形式のテンプレートファイルを読み込む
$reader = PHPExcel_IOFactory::createReader("Excel5");
$excel = $reader->load($template_path);
CSV ファイルをテンプレートファイルとして読み込み
Reader を直接作成することで、CSV ファイル形式のテンプレートファイルの読み込みもできます。
// テンプレートファイルのパス
$template_path = 'path/to/template.csv';
$reader = PHPExcel_IOFactory::createReader("CSV");
$excel = $reader->load($template_path);
・・・・
・・・・
テンプレートファイルからデータのみを読み込む
PHPExcel では罫線や背景色のスタイル設定を無視し、値のみを読み込む方法もサポートされています。PHPExcel のデフォルトではスタイルも含めてテンプレートファイルが読み込まれますので、データのみ読み込むように設定を変更する必要があります。
デフォルト設定を変更し、データのみを読み込むようにする
$fileType = 'Excel5'; $fileName = 'path/to/tenplate.xls'; // テンプレートファイル形式を指定して Reader を作成する $reader = PHPExcel_IOFactory::createReader($fileType); // データのみを読み込むように設定する $reader->setReadDataOnly(true); // テンプレートファイルの読み込み $excel = $reader->load($fileName);
setReadDataOnly メソッドに true を設定すことによってテンプレートファイルに設定されている罫線や背景色といったスタイルを無視して、セルの値や式 ( SUMなど ) のみが読み込まれることになります。
シート名を指定してテンプレートファイルを読み込む
PHPExcel は デフォルトで存在するすべてのシートを読み込みます。下記は、読み込むシート名を指定してテンプレートファイルを読み込むサンプルになります。詳細はコメントを参照ください。なお、シート名は大文字・小文字を区別します。
include_once 'PHPExcel.php';
include_once 'PHPExcel/IOFactory.php';
// テンプレートファイルのパス
$fileName = 'path/to/template.xls';
// Reader を指定する
$fileType = 'Excel5';
// ロードするシートを指定する
$sheetnames = array('sheet1','sheet2'); // 複数指定する場合
//$sheetnames = array('Sheet3'); // 1シートのみ(array形式)
//$sheetnames = 'Sheet3'; // 1シートのみ(string形式)
// Reader を取得
$reader = PHPExcel_IOFactory::createReader($fileType);
// ロードするシートを設定する
$reader->setLoadSheetsOnly($sheetnames);
// ロード
$excel = $reader->load($fileName);
// Excel97-2003 形式でブラウザに出力する
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="excel97-2003.xls"');
header('Cache-Control: max-age=0');
$writer = PHPExcel_IOFactory::createWriter($excel, "Excel5");
$writer->save('php://output');