使用PHP_XLSXWriter代替PHPExcel 實現excel數據的導入導出


       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);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM