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 件のコメント:
コメントを投稿
こちらにコメントをどうぞ