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」ファイルとしてダウンロードできます。
日本語テストも兼ねてます。