PHPExcel如何被PHP_XLSXWriter代替的方法介紹

來源:互聯網
上載者:User
PHPExcel是一個處理Excel,CVS檔案的開源架構,但不幸的是PHPExcel官方已不再維護了這個項目了,官方團隊在github上又起了一個新項目,叫PhpSpreadsheet。那麼這篇文章主要給大家介紹了關於利用PHP_XLSXWriter代替PHPExcel的方法樣本,需要的朋友可以參考下。

前言

本文主要給大家介紹的是關於利用PHP_XLSXWriter代替PHPExcel的方法,分享出來供大家參考學習,下面話不多說,來一起看看詳細的介紹:

二者有何區別?

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地址,當然大家也可以通過本地下載,你可以點擊下載把它下載下來。解壓之後你可以看到,它的核心檔案只有一個: xlswriter.class.php,examples目錄為代碼範例目錄,裡面有很多例子你可以參考。


使用

對於日常中絕大部分的報表需求,PHP_XLSXWriter 是可以勝任的,下面通過一個例子來熟悉一下API的使用。

假設我們要匯出中的報表,並通過瀏覽器實現下載:

代碼實現:

//writer 類$writer = new XLSXWriter(); //檔案名稱$filename = "example.xlsx";//設定 header,用於瀏覽器下載header('Content-disposition: attachment; filename="'.XLSXWriter::sanitize_filename($filename).'"');header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");header('Content-Transfer-Encoding: binary');header('Cache-Control: must-revalidate');header('Pragma: public');//匯出的資料$string = array ( 0 =>  array ( 'payc_bill_time' => '2017-07-12 16:40:44', 'payt_received_date' => '2017-07-12', 'ci_name' => '租金', 'payt_num' => 'YRZB(2012)A0047', 'payt_scsr_name' => '李巧紅', 'payt_received' => '300.00', 'paytd_type' => '現金', 'emp_name' => '鄭振標', ), 1 =>  array ( 'payc_bill_time' => '2017-07-12 16:39:55', 'payt_received_date' => '2017-07-12', 'ci_name' => '租金', 'payt_num' => 'YRZB(2012)A0046', 'payt_scsr_name' => '22222', 'payt_received' => '45.00', 'paytd_type' => '現金', 'emp_name' => '鄭振標', ) ); //每列的標題頭$title = array ( 0 => '開單時間', 1 => '收款時間', 2 => '開票項目', 3 => '票據編號', 4 => '客戶名稱', 5 => '實收金額', 6 => '收款方式', 7 => '收款人',);//活頁簿名稱$sheet1 = 'sheet1';//對每列指定資料類型,對應儲存格的資料類型foreach ($title as $key => $item){ $col_style[] = $key ==5 ? 'price': 'string';}//設定列格式,suppress_row: 去掉會多出一行資料;widths: 指定每列寬度$writer->writeSheetHeader($sheet1, $col_style, ['suppress_row'=>true,'widths'=>[20,20,20,20,20,20,20,20]] );//寫入第二行的資料,順便指定樣式$writer->writeSheetRow($sheet1, ['xxx財務報表'],['height'=>32,'font-size'=>20,'font-style'=>'bold','halign'=>'center','valign'=>'center']);/*設定標題頭,指定樣式*/$styles1 = array( 'font'=>'宋體','font-size'=>10,'font-style'=>'bold', 'fill'=>'#eee','halign'=>'center', 'border'=>'left,right,top,bottom');$writer->writeSheetRow($sheet1, $title,$styles1);// 最後是資料,foreach寫入foreach ($data as $value) { foreach ($value as $item) { $temp[] = $item;} $rows[] = $temp; unset($temp);}$styles2 = ['height'=>16];foreach($rows as $row){ $writer->writeSheetRow($sheet1, $row,$styles2);}//合併儲存格,第一行的大標題需要合併儲存格$writer->markMergedCell($sheet1, $start_row=0, $start_col=0, $end_row=0, $end_col=7);//輸出文檔$writer->writeToStdOut();exit(0);

上面的每行代碼都做了注釋,如果不懂得話可以去查看一下example檔案夾中的代碼範例以及官網首頁的文檔,不過文檔比較簡短;

跳坑指南:

自己在使用過程中也踩過一些坑,這裡列一下,希望對你有協助:

檔案名稱與類名不對應

在使用require或require_once時,這其實不是問題,但當使用自動載入時因為二者不對應就無法識別。你或許想把xlsxwriter.class.php檔案引入到你的項目中,並且加上命名空間,以便於能實現自動載入。此時你需要做的是把檔案名稱更改為類名XLSXWriter.class.php(這裡引入到TP中),比如我放到Component目錄下,那麼在該檔案中添加命名空間namespace Component;,此時該檔案中還有個Zip類未引入命名空間,需要添加use ZipArchive;

這些完成後,就可以在項目中其他地方使用了:

use Component;$writer = new XLSXWriter();

如何設定列格式?

不同的列可能會需要顯示不同的格式,預設的都是文字格式設定,但有時候需要顯示為數字列,比便於使用excel中的函數,比如上表中的金額列,必須是兩位小數點,千分位,數字格式。

看上面的代碼,數字格式其實是在writeSheetHeader方法中設定的,類型為price的那一列就是金額列,如果你需要其他格式,官網首頁上列出了常用的格式。

能不能單獨設定某個儲存格的值?

這個目前並沒有實現,現在資料的寫入都是逐行寫入的,不支援這麼細的粒度,不過折中的做法是把不需要填充的儲存格寫入null即可;

總結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.