PHPExcel の使い方
PHPExcel とは PHP でエクセルファイルを生成することができるライブラリです。PHPExcel を初めて使ったので今後のために使い方をメモしておきます。
インストール
PHPExcel を下記よりダウンロードした zip ファイルを解凍して中にある Classes ディレクトリを任意の場所に置きます。
PHPExcel – OpenXML – Create Excel2007 documents in PHP – Spreadsheet engine – Home
あとは PHPExcel を使う PHP でこの Classes ディレクトリにパスを通して使用するクラスをインクルードします。
set_include_path(get_include_path() . PATH_SEPARATOR . '/path/to/Classes/'); include 'PHPExcel.php'; include 'PHPExcel/IOFactory.php';
エクセルファイルを出力する
基本的な手順は下記のようになります。
- PHPExcel クラスのオブジェクトを生成
- 作業するシートを指定
- セルの値を更新
- ファイルを出力
コードで書くと以下のようになります。
$excel = new PHPExcel(); // シートの設定 $excel->setActiveSheetIndex(0); $sheet = $excel->getActiveSheet(); $sheet->setTitle('sheet name'); // セルに値を入れる $sheet->setCellValue('A1', 'hoge'); // Excel2007 形式で出力 $writer = PHPExcel_IOFactory::createWriter($excel, 'Excel2007'); $writer->save("output.xlsx");
出力形式は Excel 2007 以外にも指定できます。
// Excel 95 形式 $writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5'); $writer->save("output.xls");
他にも PDF, HTML, CSV などで出力可能です。
セルには文字列だけでなく、数値や計算式も入れられます。
$sheet->setCellValue('B1', '=A2+A3');
また、セルの指定方法は ‘A1′ のような指定もできますし、下記のように行と列を数字で指定することも可能です。
$sheet->setCellValueByColumnAndRow(1, 2, 'hoge');
セルの書式を指定する
セルに罫線を入れたり、フォント、フォントサイズなど書式を指定することも可能です。
// フォント $sheet->getDefaultStyle()->getFont()->setName('MS Pゴシック'); // フォントサイズ $sheet->getDefaultStyle()->getFont()->setSize(12); // セルの下に罫線を引く $sheet->getStyle('A1')->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); // センター寄せ $sheet->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
罫線などはまとめて以下のようにして指定することも可能です。
$cell_style = array( 'borders' => array( 'top' => array('style' => PHPExcel_Style_Border::BORDER_THIN), 'bottom' => array('style' => PHPExcel_Style_Border::BORDER_THIN), 'left' => array('style' => PHPExcel_Style_Border::BORDER_THIN), 'right' => array('style' => PHPExcel_Style_Border::BORDER_THIN) ) ); $sheet->getStyle('A1')->applyFromArray($cell_style); // 行と列で指定することも可能 $sheet->getStyleByColumnAndRow(1, 2)->applyFromArray($cell_style);
セルの色の指定も可能。
$sheet->getStyleByColumnAndRow(1, 2)->getFill()->getStartColor()->setARGB('FFCCFFCC');
テンプレートを読み込んで加工する
PHPExcel でのセルの書式の指定とか結構面倒です。PHP で出力する Excel とかはだいたいフォーマットが同じことが多いです。そこで、まずエクセルで元となるファイルを作成してフォントやセルの色、罫線など必要な設定をしておきます。PHP では各セルの値だけを変更して出力するともっと簡単にできます。
// read template xls file $reader = PHPExcel_IOFactory::createReader('Excel5'); $excel = $reader->load(TEMPLATE_FILE); // set active sheet $excel->setActiveSheetIndex(0); $sheet = $excel->getActiveSheet(); // update cell $sheet->setCellValue('A1', 'hoge'); // output excel file $writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5'); $writer->save("output.xls");
PHPExcel のオブジェクトを生成する部分が違うだけです。
その他
zip ファイルを解凍した中に Documentation フォルダがあり、その中に HTML 形式のドキュメントが入っています。
また、Tests フォルダには 29 個のサンプルコードが入っています。ファイル名からやりたいことの当りをつけられるので、やり方が分からない時には大変参考になります。
関連する投稿
8 comments
コメントをどうぞ
Additional comments powered by BackType
PhpEXcelでエクセルファイルを開いてpdfで保存しようとしても何の反応もありません。ここで説明している下記処理はOKですが、
$writer = PHPExcel_IOFactory::createWriter($excel, ‘Excel5′);
下記pdf及び
$writer = PHPExcel_IOFactory::createWriter($excel, ‘pdf’);
$writer = PHPExcel_IOFactory::createWriter($excel, ‘Excel2007′);
は動きません。環境は
Apache/2.2.17 (Win32) PHP/5.3.5
です。何が悪いのでしょうか。
[...] http://blog.syuhari.jp/archives/1621 [...]
[...] PHPExcelなるものがあることを昨日知りました。どうやって見つけたかというと、なんと本が出版されていたのです。そんなに有名なものなのかと、とりあえずググってみます。けっこう出てきました。上位に表示されて、比較的わかりやすかったのがこちらのサイト。リファレンスっぽいのならこちらのサイト。CakePHPでの使用ならこちらのサイト。 [...]
[...] メソッドなどに関してはPHPExcel の使い方 | SUN LIMITED MT.を参考にさせてもらいました //オブジェクト作成 $excel = new PHPExcel(); //親のループ数保持 $cnt_p = 0; //親のループ($p_all) foreach($p_all as $out_key => $out_val){ //親のそれぞれのシートを作成 $excel->createSheet(); $sheet = $excel->setActiveSheetIndex($cnt_p); $sheet->setTitle('親のタイトルとか'); //幅指定 $sheet->getColumnDimension('A')->setWidth(40); $sheet->getColumnDimension('B')->setWidth(15); //最初の見出し $sheet->setCellValue('A1', '見出し1'); $sheet->setCellValue('B1', '見出し2'); //フォントサイズ $sheet->getDefaultStyle()->getFont()->setSize(18); //下線 $sheet->getStyle('A1')->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); $sheet->getStyle('B1')->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); //テキスト位置 $sheet->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $sheet->getStyle('B1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //子のループ数保持(最初の1行は見出しのため) $cnt_c = 2; //フォントサイズリセット $sheet->getDefaultStyle()->getFont()->setSize(15); //子要素ループ foreach($out_val as $key => $val ){ $sheet->setCellValue('A'.$cnt_c, '子要素 値1'); $sheet->setCellValue('B'.$cnt_c, '子要素 値2'); $cnt_c++; } $cnt_p++; } [...]
[...] PHPExcel の使い方 PHP、PHPExcelでExcel出力(ファイルダウンロード) More from my [...]
[...] PHPExcel の使い方 [...]
The Best Proxy…
PHPExcel ã?¨ã?¯ PHP ã?§ã?¨ã?¯ã??ã??ã??ã?¡ã?¤ã??ã?’生æ??ã?™ã??ã?“ã?¨ã?Œã?§ã??ã??ã?©ã?¤ã??ã?©ã?ªã?§ã?™ã??PHPExcel…
3numerical…
…