今回から何回かに分けてPHPでエクセルを出力できるライブラリ「PHPExcel」の使い方を説明していきたいと思います。
そもそもライブラリとは?
「便利な機能を色々な場所から呼び出せるようにまとめたコードの集まり」という感じです。プラグインは「何かを拡張する」ものなので、ライブラリとプラグインは似て非なるものです。
(こちらにとても詳しく書いてありました)
プラグイン、ライブラリ、コンポーネント、モジュールの違いは?
ダウンロード
こちらから本体をダウンロードします。
PHPExcel
右のDownloadをクリックすると「PHPExcel_1.8.0_doc.zip」がダウンロードされますので解凍します。
├── Classes ├── Documentation ├── Examples ├── changelog.txt ├── install.txt └── license.txt
解凍すると上記のようになっていますが、「Classes」の中身だけが必要です。
使い方
テスト用のサーバーにlibというディレクトリを作成し、「Classes」の中身をlibの中にアップしてindex.phpを作成し、下記にような状態にしました。(libはライブラリの略です)
├── index.php └── lib ├── PHPExcel └── PHPExcel.php
それでは、index.phpを編集していきます。
まずは、ライブラリを読み込みます。
<?php require_once(__DIR__ . "/lib/PHPExcel.php"); require_once(__DIR__ . "/lib/PHPExcel/IOFactory.php");
これでPHPExcelを使用する準備ができました。とても簡単ですね。
PHPExcelではテンプレートを読み込んで編集する方法と新しくエクセルを作成する方法がありますが、今回は新しくエクセルを作成してみます。
<?php require_once(__DIR__ . "/lib/PHPExcel.php"); require_once(__DIR__ . "/lib/PHPExcel/IOFactory.php"); // エクセルを新規作成 $excel = new PHPExcel(); // 0番目のシートをアクティブにします(シートは0から数えます) // (エクセルを新規作成した時点で0番目の空のシートが作成されています) $excel->setActiveSheetIndex(0); // シートに対して何かを行うためにアクティブになっているシートを変数に入れます $sheet = $excel->getActiveSheet(); // シートに名前を付けます $sheet->setTitle("テスト"); // セル(A1)に値を入力します。 $sheet->setCellValue('A1', '初めての'); // セル名ではなく数値(座標)で値を入力する方法もあります // 第1引数は列を「0から」数えた数値、第2引数は行を「1から」数えた数値になります // 下記はA2に値を入力しています $sheet->setCellValueByColumnAndRow(0, 2, "PHPExcel"); // Excel2007形式で出力する $writer = PHPExcel_IOFactory::createWriter($excel, "Excel2007"); $writer->save("PHPExcel.xlsx"); exit;
この状態でindex.phpにアクセスすると同じディレクトリにPHPExcel.xlsxが作成されていると思います。
ブラウザからダウンロードしたい場合は最後を下記のように変更すればOKです。
// Excel2007形式で出力する header("Content-Type: application/vnd.ms-excel"); header("Content-Disposition: attachment;filename='PHPExcel.xlsx'"); header("Cache-Control: max-age=0"); $writer = PHPExcel_IOFactory::createWriter($excel, "Excel2007"); $writer->save("php://output"); exit;
最後に・・・
今回はここまでです。テンプレートを読み込んで編集したのち出力する方法は「PHPExcelでエクセルを出力してみる(その2)」をご覧ください。
PHPでExcelを出力できるライブラリは他にもあり、PEARの「Spreadsheet_Excel_Writer」を使ったことがありますが、PHPExcelに比べると動作はかなり早いですが、Excel95(かなり古い形式)しかできず、PHP5.4以上では使えないので残念ながら過去の遺物です…orz
(参考にさせていただいた記事)
PHPでエクセル(xlsx&xls)を扱う方法