初投稿なので読みにくかったらごめんなさい。
PHP+Mysqlで作成してあるWEBシステムがあります。
お客様からデータを入力した物をEXCELに出力して使いたいという話がありました。
C#やVB.NETではかなりよくある話ですわね。(JAVAは業務では使わないのでよくある話かはわからないw)
PHP歴もぼちぼち長いのですがPHPでEXCELってやった事無かったので調べてみますかと言うのが今回の話です。
でPHPExcelで行きましょうって言う話で基礎の基礎です。
まずはライブラリをダウンロード
PHPExcelは1.8を使ってます。
ざっくりとテンプレート用のエクセルを読み込んでセルに内容を書いてダウンロードさせるコードを書いておきます。
このコードだとサーバにファイルを保存しませんので個人的にはこっちがいいかなと思います。
まぁ基本的な事しかやってないので古いバージョンでも今後の新しいバージョンでも動くでしょうね。
EXCEL2007形式(いわゆる拡張子が「xlsx」の物)を前提で書いてます。
EXCEL2003以前は読み込むライブラリが増えるのと、読み込み時の指定が「Excel2007」が「Excel5」になるくらいですかね?(試してない
<?php
//ライブラリの読込
require_once 'PHPExcel.php';
require_once 'PHPExcel/IOFactory.php';
//テンプレート(というかエクセルファイル)の読込
$file = "tmp_excel.xlsx";
$obj = PHPExcel_IOFactory::createReader('Excel2007');
$book = $obj->load($file);
//シートを設定する
$book->setActiveSheetIndex(0);//一番最初のシートを選択
$sheet = $book->getActiveSheet();//選択シートにアクセスを開始
$sheet->setTitle('sheet1'); //シート名を設定する
//セルにデータをセット
$sheet->setCellValue('D5' , 'テスト');//D5セルに「テスト」と書き込む
//Excel2007形式で出力する準備
//「vnd.ms-excel」だとブラウザによってはそのまま開いたりするのでこの方が良いかと
header('Content-Type: application/octet-stream');
//ダウンロードするファイル名を設定
header('Content-Disposition: attachment;filename="download_test.xlsx"');
$writer = PHPExcel_IOFactory::createWriter($book, "Excel2007");//EXCEL2007形式
$writer->save('php://output');//出力開始
テンプレート用エクセルを準備せずに新規作成も当然出来るんですが、個人的には空のエクセルを作っておいて、テンプレートエクセルとして読み込ませても一緒なので良いのでは無いかと思いますがw(ダメかな?