PHPExcel 是一個處理Excel,CVS文件的開源框架,它基於微軟的OpenXML標准和PHP語言。可以使用它來讀取、寫入不同格式的電子表格,這也是PHP至今最通用的Excel處理工具,但是它有一個非常致命的缺點: 特別占內存,對大批量的表格數據幾乎會讓人累覺不愛,處理速度非常慢,但是它功能非常豐富,API非常多,所以在導出復雜格式的Excel表格時,你往往不得不使用它,真是讓人又愛又恨。
不幸的是,PHPExcel官方已不再維護了這個項目了,官方團隊在github上又起了一個新項目,叫PhpSpreadsheet,新項目使用了大量的php新特性,比如命名空間,PSR標准,性能也比PHPExcel高了不少,不過該項目至今(2017-07-12)還是開發狀態,最小穩定版還沒出來,估計bug會比較多,所以並不建議使用。
相比於PHPExcel,PHP_XLSXWriter是一個小而強悍的Excel讀寫插件,它並沒有PHPExcel功能豐富,很多高級操作比如凍結表頭,並不具備,但是它導出速度非常快,非常適合於數據量特別大,報表格式不是很復雜的導出需求,下圖是官方的速度和內存測試:
PHP_XLSXWriter 如何使用?
下載
這是 PHP_XLSXWriter的github地址,https://github.com/mk-j/PHP_XLSXWriter 你可以點擊下載把它下載下來。解壓之后你可以看到,它的核心文件只有一個: xlswriter.class.php,examples目錄為代碼樣例目錄,里面有很多例子你可以參考。
使用
對於日常中絕大部分的報表需求,PHP_XLSXWriter 是可以勝任的,下面通過一個例子來熟悉一下API的使用。
假設我們要導出下圖中的報表,並通過瀏覽器實現下載:
例子:
namespace app\×××\controller\×××; use think\Exception; use think\Loader; use think\Log; Loader::import('xlsxWrite.xlsxWrite',EXTEND_PATH,'.class.php'); class Xlsx extends \xlsxWrite { public $name; public function getXlsx(){ $header = array( '企業名稱'=>'string',//text '聯系人'=>'string',//text '聯系方式'=>'string', '省/自治區/直轄市'=>'string', '市'=>'string', '區/縣'=>'string', '公司注冊地址'=>'string', '成立時間'=>'string', '主營特色'=>'string', '店面數量'=>'string', '資產總額'=>'string', '營收總額'=>'string', '現有貸款狀況'=>'string', '當前資金需求'=>'string', '推薦人'=>'string', '備注'=>'string', '填寫時間'=>'datetime', ); $data = Wxzhinfo::where('create_time',"<",time())->select(); if(!$data){ return ; } $list = []; foreach ($data as $v){ $v->hidden(['id','update_time','wxzhautho_id','data']); array_push($list,array_values($v->toArray())); } $writer = new \xlsxWrite(); $writer->writeSheetHeader('Sheet1', $header); foreach($list as $row) $writer->writeSheetRow('Sheet1', $row); // 輸出文件 $this->name = date("Y-m-d",strtotime("-1 day")).".xlsx"; $writer->writeToFile($this->name); }
}