CodeIgniterの使用バージョン 2.0.3 ja
CodeIgniterからExcelを利用するのに、今回はPHPExcelを利用します。
PHPExcelをサイトからダウンロード
PHPExcel
PEAR版もあるが、使っていないので通常版 PHPExcel 1.7.6 (ダウンロード時のバージョン)
ダウンロードファイルを解凍し、以下のファイルをCodeIgniterの application/libraries にコピー
PHPExcel1.7.6\Classes\PHPExcel
PHPExcel1.7.6\Classes\PHPExcel.php
とあるサイトには、
$this->load->library("PHPExcel");
$this->load->library("PHPExcel/IOFactory");
・
・
$objWriter = IOFactory::createWriter($objPHPExcel, "Excel5");
・
・
とこのように書かれていましたが、動きません。エラーとなります。
PHPExcelのバージョンも1.7.6と書かれていますが・・・
まず、「PHPExcel/IOFactory」ですが
ファイルの中を見るとクラス名は、「PHPExcel_IOFactory」となっています。
また、「__construct」は「private」です。
ロードできるわけがない。
たぶん、動かしてないんだろう。
実際ダウンロードしたファイルにサンプルが入っているんだが
「IOFactory」をロードする必要なんかないし・・・
実際CodeIgniterで動作させたサンプルコードは以下。
ダウンロードするのが目的なんで
test\01simple-download-xls.php を Codeigniter に組み込みました。
class Sampleexcel extends CI_Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$this->downloadExcel();
}
private function downloadExcel()
{
$this->load->library("phpexcel");
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
// Set properties
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");
// Add some data
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', mb_convert_encoding('日本語','UTF-8', mb_internal_encoding()))
->setCellValue('B2', mb_convert_encoding('テストです。','UTF-8', mb_internal_encoding()))
->setCellValue('C1', mb_convert_encoding('文字エンコード','UTF-8', mb_internal_encoding()))
->setCellValue('D2', mb_convert_encoding('EUCなんですけど','UTF-8', mb_internal_encoding()));
// Rename sheet
$objPHPExcel->getActiveSheet()->setTitle('Simple');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="01simple.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
}
このコントローラをVIEWからリンクなどで呼び出すと「01simple.xls」ファイルとしてダウンロードできます。
日本語テストも兼ねてます。