Help us understand the problem. What is going on with this article?

PHPExcelを使う(基本のみ)

More than 3 years have passed since last update.

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

環境

  • 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を使うと怒られる仕様になったため。
該当部分をコメントアウトで解決しました!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away