自分がまたつかう時用のメモ。
環境
- PHP5.2.4 (PHP7だとエラー)
- xlsファイルで出力
- 書式設定はテンプレートファイルに指定
- xlsxなら
Excel5
はExcel2007
,拡張子xls
はxlsx
に読み替え
##まずはダウンロードとインストール
ここからダウンロード
(2015.6.10時点での最新は1.8.0です)
処理に必要なのはClassesフォルダだけなので、解凍した後にClassesだけ処理を行うPHP付近に置けばOK
##実際の処理
//ディレクトリ設定
$dir = 'Classesがある場所のパス';
//ライブラリ読み込み
require_once $dir . '/Classes/PHPExcel.php';
require_once $dir . '/Classes/PHPExcel/IOFactory.php';
//テンプレート読み込み
$file =$dir.'temp.xls';//テンプレート名
$reader = PHPExcel_IOFactory::createReader('Excel5');
$book = $reader->load($file);
//シートを設定する
$book->setActiveSheetIndex(0);//一番最初のシートを選択(2枚目なら(1))
$sheet = $book->getActiveSheet();//選択シートにアクセスを開始
$sheet->setTitle( $month.'月' ); //シート名を設定、変数OK
/***************
* 書き込み処理
***************/
//セルを指定して書き込み
//セル名指定
$sheet->setCellValue('セル名','書き込み内容');
//セル位置指定
//列はA=0,B=1... 行はそのまま
$sheet->setCellValueByColumnAndRow(列,行,'書き込み内容');
/***************
* 出力処理
***************/
//出力ファイル名の設定(拡張子は出力形式に合わせて変える)
$output = 'output_'.$month.'.xls';
// Excel97-2003形式(xls)で出力する
$writer = PHPExcel_IOFactory::createWriter($book, 'Excel5');
$writer->save($output);
//DLさせる場合はこっち
header('Content-Type: application/vnd.ms-excel');
ob_end_clean();//バッファのゴミ捨て
header('Content-Disposition: attachment;filename=$output');
header('Cache-Control: max-age=0');
$writer = PHPExcel_IOFactory::createWriter($book, "Excel5");
$writer->save('php://output');
ハマったこと
エラー出力設定をしていたので、エラーが出力されてしまってheaderがエラーを吐くという凡ミス(^▽^;)
DLできたので安心していたら、ファイルが破損していて云々と言われてしまって開けなかった…いろいろ調べた結果バッファのゴミが原因らしい。
ob_end_clean();
を追加したら解決しました(*^-^)
PHP7だとエラー
同じ操作をPHP7環境下で実行すると、DLはするもののファイルが壊れて開けません!って言われる。
エラーを見ると
PHP Fatal error:'break' not in the 'loop' or 'switch' context in /Classes/PHPExcel/Calculation/Functions.php on line 581
とのこと。
PHP7からloop
やswicth
以外でbreak
を使うと怒られる仕様になったため。
該当部分をコメントアウトで解決しました!