Hatena::ブログ(Diary)

130単位

2009-05-23

PHPExcel テンプレートを用いた書き込み&書式の設定

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

PHPExcelは、テンプレートとなるExcelファイルを用意しておいて、そこへデータを書き込むことも可能です。今回はそのサンプルです。ついでに罫線も出力してみます。

テンプレートの用意

せっかくなので、CSVではできないことをしてみます。セル結合をしたヘッダーにして罫線を付与、さらにウインドウ枠を固定します。

f:id:deeeki:20090523120701j:image

コード例

<?php
//配列作成
$cd_list = array(
    array('(3rd Album)', '2009', '07', '08', 'AL'),
    array('ワンルーム・ディスコ', '2009', '03', '25', 'SG'),
    array('Dream Fighter', '2008', '11', '19', 'SG'),
    array('love the world', '2008', '07', '09', 'SG'),
    array('GAME', '2008', '04', '16', 'AL'),
);

//セルの書式 (文字列、上下左右に罫線)
$cell_style = array(
    'numberformat' => array('code' => PHPExcel_Style_NumberFormat::FORMAT_TEXT),
    '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)
    )
);

//ライブラリのインクルード
set_include_path(get_include_path() . PATH_SEPARATOR . './PHPExcel/Classes/');
include 'PHPExcel.php';
include 'PHPExcel/IOFactory.php';

//テンプレートを読み込んでインスタンス化
$objReader = PHPExcel_IOFactory::createReader("Excel5");
$objPHPExcel = $objReader->load("./template.xls");
            
//データのセット
$row = 3;		//ヘッダの行数を除く
foreach ($cd_list as $cd) {
    $col = 0;
    foreach ($cd as $value) {
        $objPHPExcel->getActiveSheet()->setCellValueExplicitByColumnAndRow($col, $row, $value, PHPExcel_Cell_DataType::TYPE_STRING);
        $objPHPExcel->getActiveSheet()->getStyleByColumnAndRow($col++, $row)->applyFromArray($cell_style);
    }
    $row++;
}

//Excel2003以前の形式でファイル出力
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('./cd_list.xls');

出力結果

f:id:deeeki:20090523120726j:image

簡単な解説

  • PHPExcel_Worksheet#setCellValueExplicitByColumnAndRow()で、セルにセットする値のデータ型を指定できる
    • PHPExcel_Cell_DataType::TYPE_STRINGにすると、先頭の0もそのまま出力される
  • PHPExcel_Style#applyFromArray()で、セルに連想配列から書式を適用することができる
    • ライブラリに同梱のTests/05featuredemo.inc.phpを参考
    • 一度に適用する場合は、PHPExcel_Worksheet#duplicateStyleArray()を用いると良いっぽい
      • Tests/22heavilyformatted.phpを参考
      • 第二引数に「"A1:T100"」と文字でセルの範囲を指定する必要がある
  • 'numberformat' => array('code' => PHPExcel_Style_NumberFormat::FORMAT_TEXT)にするメリット

関連記事:

PHPExcel xlsファイルのデータを読み込む - 130単位

PHPExcelを使ってみた ループ編 - 130単位

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


画像認証

トラックバック - http://d.hatena.ne.jp/deeeki/20090523/phpexceltemplate
リンク元