2009-05-01
PHPExcelを使ってみた ループ編
PHPExcel - OpenXML - Create Excel2007 documents in PHP - Spreadsheet engine - Home http://phpexcel.codeplex.com/
PHPでExcel形式のファイルを入出力できるライブラリです。
(※この記事に用いたバージョン…Ver.1.6.7)
きっかけなど
通常のCSVファイルの、ヘッダの部分だけを加工したいという要望がありまして。Excel出力ができる方法を探してみたところ、このライブラリに辿り着いたのでした。
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Hello');
このようにセルを指定して値をセットしていけばいいみたいです。
ただ、DBから取得した連想配列のリストを出力したい場合、ループ処理で書きたいところです。上記メソッドだとアルファベットの指定になるため、いかにも面倒。そこで「setCellValue」でgrepをかけてみたら、それっぽい便利なメソッドがありました(Worksheet.php内)。
public function setCellValueByColumnAndRow($pColumn = 0, $pRow = 0, $pValue = null)
このメソッドに列の位置と行の位置を与えてやれば良さそうです。
コード例
アーカイブに同梱されていたTests/01simple.phpを基に書いてみたサンプルコードです。
<?php //配列作成 $member_list = array( array('id' => '1', 'code' => 'kashiyuka', 'name' => 'かしゆか'), array('id' => '2', 'code' => 'a-chan', 'name' => 'あ〜ちゃん'), array('id' => '3', 'code' => 'nocchi', 'name' => 'のっち') ); //ライブラリのインクルード set_include_path(get_include_path() . PATH_SEPARATOR . './PHPExcel/Classes/'); include 'PHPExcel.php'; include 'PHPExcel/IOFactory.php'; //インスタンス化 $objPHPExcel = new PHPExcel(); //データのセット $row = 1; foreach ($member_list as $member) { $col = 0; foreach ($member as $value) { $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col++, $row, $value); } $row++; } //シート名のセット $objPHPExcel->getActiveSheet()->setTitle('Perfume'); //Excel2003以前の形式でファイル出力 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('./Perfume.xls');
出力結果
わかったこと
- setCellValueByColumnAndRow()の第一引数($pColumn:列)は0からはじまる
- setCellValueByColumnAndRow()の第二引数($pRow:行)は1からはじまる
- SJISで記述したphpファイルだと日本語が文字化けする*1
- UTF-8で記述したphpファイルだと文字化けしない
- 1ファイル1シートの場合は、$objPHPExcel->setActiveSheetIndex(0)をする必要はない
- コンストラクタで0にセットされている
枠線なども設定できたりとかなり高機能なようなので、いろいろ試してみたいと思います。
参考リンク
SE奮闘記: PHPからエクセルを操作するPHP-Excelを使ってみた http://se-suganuma.blogspot.com/2008/11/phpphp-excel.html 【ハウツー】PHPExcelを使ってPHPでExcelファイルを出力する (1) PHPExcelとは | エンタープライズ | マイコミジャーナル http://journal.mycom.co.jp/articles/2009/03/06/phpexcel/index.html
*1:「ファイルが壊れている」的なエラーが出る
トラックバック - http://d.hatena.ne.jp/deeeki/20090501/phpexcelloop
リンク元
- 317 http://www.google.co.jp/url?sa=t&rct=j&q=phpexcel&source=web&cd=5&ved=0CEgQFjAE&url=http://d.hatena.ne.jp/deeeki/20090501/phpexcelloop&ei=DjBcTpnOD8iDmQWCvqkK&usg=AFQjCNHbmrBSNStMulC2BoP6Z2nFdc7vHA&sig2=GA9jyzdP-BcfAq8eMsBkqA&cad=rja
- 245 http://www.google.co.jp/url?sa=t&rct=j&q=PHP excel&source=web&cd=6&ved=0CGIQFjAF&url=http://d.hatena.ne.jp/deeeki/20090501/phpexcelloop&ei=_-_OToysEeqamQWk1qytDQ&usg=AFQjCNHbmrBSNStMulC2BoP6Z2nFdc7vHA&sig2=DEsKbUpRgJOAMb92YJvSNw
- 132 http://www.google.co.jp/search?q=phpexcel&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 105 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GZEZ_jaJP280JP280&q=phpexcel
- 93 http://www.google.co.jp/search?q=PHPExcel&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 73 http://search.yahoo.co.jp/search?p=phpexcel&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=&oq=
- 59 http://www.google.co.jp/hws/search?hl=ja&q=PHPExcel&client=fenrir&adsafe=off&safe=off&lr=lang_ja
- 54 http://www.google.co.jp/search?hl=ja&q=phpExcel&lr=lang_ja
- 48 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=QPs&q=phpexcel&btnG=検索&lr=
- 42 http://blog.livedoor.jp/liucheng/archives/51516067.html




