LoginSignup
22
22

More than 5 years have passed since last update.

PHPExcelを使う(基本のみ)

Last updated at Posted at 2015-06-10

自分がまたつかう時用のメモ。

環境

  • PHP5.2.4 (PHP7だとエラー)
  • xlsファイルで出力
  • 書式設定はテンプレートファイルに指定
  • xlsxならExcel5Excel2007,拡張子xlsxlsxに読み替え

まずはダウンロードとインストール

ここからダウンロード
(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からloopswicth以外でbreakを使うと怒られる仕様になったため。
該当部分をコメントアウトで解決しました!

22
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
22