Hatena::ブログ(Diary)

130単位

2009-05-01

PHPExcelを使ってみた ループ編

PHPExcel - OpenXML - Create Excel2007 documents in PHP - Spreadsheet engine - Home
http://phpexcel.codeplex.com/

PHPExcel形式のファイルを入出力できるライブラリです。

(※この記事に用いたバージョン…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');

出力結果

f:id:deeeki:20090502035402j:image

わかったこと

  • setCellValueByColumnAndRow()の第一引数($pColumn:列)は0からはじまる
  • setCellValueByColumnAndRow()の第二引数($pRow:行)は1からはじまる
  • SJISで記述したphpファイルだと日本語が文字化けする*1
  • UTF-8で記述したphpファイルだと文字化けしない
  • 1ファイル1シートの場合は、$objPHPExcel->setActiveSheetIndex(0)をする必要はない

枠線なども設定できたりとかなり高機能なようなので、いろいろ試してみたいと思います。

参考リンク

SE奮闘記: PHPからエクセルを操作するPHP-Excelを使ってみた
http://se-suganuma.blogspot.com/2008/11/phpphp-excel.htmlハウツー】PHPExcelを使ってPHPExcelファイルを出力する (1) PHPExcelとは | エンタープライズ | マイコミジャーナル
http://journal.mycom.co.jp/articles/2009/03/06/phpexcel/index.html

*1:「ファイルが壊れている」的なエラーが出る

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/deeeki/20090501/phpexcelloop