1、下載php
phpexcel:http://phpexcel.codeplex.com/數組
2、瀏覽器
把classes下的文件copy到ci框架下的application/libraries目錄下。app
能夠先看看example目錄的例子。框架
3、簡單的封裝ui
放在application/libraries目錄下this
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); /** Include PHPExcel */ require_once dirname(__FILE__) . '/PHPExcel.php'; /** * Class TableExport */ class TableExport { /** @var PHPExcel */ private $_PHPExcel; /** * * @param PHPExcel $arg_phpExcel */ public function __construct($arg_phpExcel = null) { if (is_null($arg_phpExcel) || !($arg_phpExcel instanceof PHPExcel)) $this->_PHPExcel = new PHPExcel(); else $this->_PHPExcel = $arg_phpExcel; } /** * * @return PHPExcel_DocumentProperties */ public function getProperties() { return $this->_PHPExcel->getProperties(); } /** * 編寫內容 * @notice 嚴格注意傳入的數組格式.這裏會自動忽略一些異常的行數據的 * @param array $arg_title 一維數組 表格列名標題 * @param array $arg_comment 二維數組 * @todo:未中文編碼處理 * @throws PHPExcel_Exception * @return $this */ public function setComment(array $arg_title, array $arg_comment) { static $AChar = 65; $column = 0; if (empty($arg_title) || !is_array($arg_title) || !is_array($arg_comment)) { throw new PHPExcel_Exception("TableExport::setComment arg_title is empty or the args not is array"); } $column_count = count($arg_title); $this->_PHPExcel->setActiveSheetIndex(0); //設置列名 foreach ($arg_title as $val) { $this->_PHPExcel->getActiveSheet()->getStyle(chr($AChar + $column) . '1')->getFont()->setName('Candara'); $this->_PHPExcel->getActiveSheet()->getStyle(chr($AChar + $column) . '1')->getFont()->setSize(16); $this->_PHPExcel->getActiveSheet()->getStyle(chr($AChar + $column) . '1')->getFont()->setBold(true); $this->_PHPExcel->getActiveSheet()->getColumnDimension(chr($AChar + $column))->setWidth(21); $this->_PHPExcel->getActiveSheet()->setCellValue(chr($AChar + $column) . '1', $val); $column++; } //填寫內容 $column = 0; //列 $row = 2; //行 foreach ($arg_comment as $rows) { //若是行內容異常,則忽略本行 if (!is_array($rows) || count($rows) != $column_count) continue; $column = 0; //列 foreach ($rows as $val) { $this->_PHPExcel->getActiveSheet()->setCellValue(chr($AChar + $column) . $row, $val); $column++; } $row++; } $this->_PHPExcel->setActiveSheetIndex(0); return $this; } /** * 輸出內容到網頁,提供下載 * * @param string $arg_filename 下載文件名 */ public function outputDownload_Excel5($arg_filename) { // 重定向輸出到瀏覽器客戶端 (Excel5) header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . $arg_filename . '"'); header('Cache-Control: max-age=0'); // IE 9下的頭部信息 header('Cache-Control: max-age=1'); // IE SSL header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Cache-Control: cache, must-revalidate'); // HTTP/1.1 header('Pragma: public'); // HTTP/1.0 $objWriter = PHPExcel_IOFactory::createWriter($this->_PHPExcel, 'Excel5'); $objWriter->save('php://output'); } public function convertUTF8($str) { if (empty($str)) return ''; return iconv('gb2312', 'utf-8', $str); } /** * 魔術方法__call * * @param $method * @param $args * @return mixed|void */ public function __call($method, $args) { //調用PHPExcel本身的方法 if (method_exists($this->_PHPExcel, $method)) { return call_user_func_array(array($this->_PHPExcel, $method), $args); } else { //TODO:異常處理 return false; } } }
上面主要有兩個方法,編碼
setComment()輸入excel內容,首先是列名,佔據了第一行位置(A1,B1,C1....),而後真正的數據從第二行開始。 outputDownload_Excel5()輸出Excel5格式的文件流到瀏覽器
其餘方法都所有委託到本來的PHPExcel中去。excel
而後在控制器下調用code
$this->load->library('TableExport'); $this->tableexport->getProperties()->setTitle("xxxx")->setSubject("xxxx"); $this->tableexport->getDefaultStyle()->getFont()->setSize(13); $this->tableexport->setComment($column, $rows)->outputDownload_Excel5("xxx.xls");
而後瀏覽器下會提示查看或者保存的(谷歌下直接下載了)。
4、結束語
望指正!