2011年4月19日火曜日

【CakePHP関連】PHPExcelを利用する方法

お疲れ様です。

PHPExcelというphpでExcelファイルを生成するライブラリがあります。
それをCakePHPで実装する方法をご紹介します。

環境

cakephp:1.2.10
PHPExcel:1.7.6

フォルダ構成
add/vendorsの中にphpexcelフォルダを生成し、その中にダウンロードした
PHPExcelファイル群をアップロードし、phpexcel.phpを新規に作成します。

app
└vendors
  └phpexcel(新規フォルダ)
      └Classes
      └Documentation
      └Tests
      └changelog.txt
      └install.txt
      └license.txt
      └phpexcel.php(オリジナルファイル)

わかりづらいですが、こんな感じです。

また、予めテンプレートExcelファイルをアップロードします。
場所はapp/webroot/tmpフォルダ内です。
tmpフォルダがない場合は、新規に作成します。
テンプレートExcelファイル名は「template.xls」となります。

続いてオリジナルファイルの中身です。

<?php

ini_set('include_path', get_include_path() . PATH_SEPARATOR . VENDORS. "phpexcel" . DS . "Classes");

require_once 'Classes/PHPExcel.php';

require_once 'Classes/PHPExcel/IOFactory.php';

?>

ここで、Classes中のPHPExcel.phpと、PHPExcel内のIOFactory.phpを呼び出します。

最後にコントローラーの記述です。


<?php

//PHPExcleの読み込み
require_once '../vendors/phpexcel/phpexcel.php';


class TestsController extends AppController {

public $name = 'Tests';
public $uses = 'Tests';

function dailies_report_download(){

$this->autoRender = false; // Viewを使わない
Configure::write('debug', 0); // debugコードを出さない

//Templateを読み込んで、PHPExcelオブジェクトの生成
$reader = PHPExcel_IOFactory::createReader('Excel5');
$xl = $reader->load('tmp/template.xls');

//シートの設定
$xl->setActiveSheetIndex(0);
$sheet = $xl->getActiveSheet();

//セルの値を設定
$sheet->setCellValue('b3', 'b3のセルに値が入る');
$sheet->setCellValue('b4', 'b4のセルに値が入る');
$sheet->setCellValue('c8', 'c8のセルに値が入る');
$sheet->setCellValue('e8', 'e8のセルに値が入る');

//画像用のオプジェクト作成
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setPath('../webroot/img/Tests/Test.png');///貼り付ける画像のパスを指定
$objDrawing->setHeight(210);////画像の高さを指定

///画像のプロパティを見たときに表示される情報を設定
$objDrawing->setName('Test');////ファイル名
$objDrawing->setDescription('Test画像');////画像の概要
$objDrawing->setCoordinates('B14');///位置
$objDrawing->setOffsetX(50);////横方向へ何ピクセルずらすかを指定
$objDrawing->getShadow()->setVisible(true);////ドロップシャドウをつけるかどうか。

///PHPExcelオブジェクトに張り込み
$objDrawing->setWorksheet($sheet);

//スタイルの設定(標準フォント、罫線、中央揃え)
$sheet->getDefaultStyle()->getFont()->setName('MS Pゴシック');
$sheet->getDefaultStyle()->getFont()->setSize(11);
$sheet->getStyle('b3')->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

//Excel95形式で保存
$writer = PHPExcel_IOFactory::createWriter($xl, 'Excel5');
  //tmpフォルダ内にExcelファイルが保存される
$writer->save("tmp/output.xls");

/*
* 95-2003形式でダウンロード
*/
  //ダウンロードされるExcelファイルの名前を指定
header ("Content-disposition: attachment; filename=test.xls");
header ("Content-type: application/octet-stream; name=test.xls");

//tmpフォルダに保存されているExcelファイルをダウンロード
$out = file_get_contents("tmp/output.xls");
return($out);
}
}
?>

以上です。

0 件のコメント:

コメントを投稿

こちらにコメントをどうぞ