PHP_XLSXWriter替換PHPExcel,PhpSpreadsheet 他們之間的區別與效能
阿新 • • 發佈:2020-12-30
技術標籤:php
PHP_XLSXWriter替換PHPExcel,PhpSpreadsheet 他們之間的區別與效能
PHPExcel 是一個處理Excel,CVS檔案的開源框架,它基於微軟的OpenXML標準和PHP語言。可以使用它來讀取、寫入不同格式的電子表格,這也是PHP至今最通用的Excel處理工具,但是它有一個非常致命的缺點: 特別佔記憶體,對大批量的表格資料幾乎會讓人累覺不愛,處理速度非常慢,但是它功能非常豐富,API非常多,所以在匯出複雜格式的Excel表格時,你往往不得不使用它,真是讓人又愛又恨。
不幸的是,PHPExcel官方已不再維護了這個專案了,官方團隊在github上又起了一個新專案,叫PhpSpreadsheet,新專案使用了大量的php新特性,比如名稱空間,PSR標準,效能也比PHPExcel高了不少
public function phpByExcel($data){ $t1 = microtime(true); $phpExcel = new \PHPExcel(); $phpExcel->setActiveSheetIndex(0); $phpExcel->getActiveSheet()->setTitle('使用者資訊'); $phpExcel->getActiveSheet()->setCellValue("A1", "id"); $phpExcel->getActiveSheet()->setCellValue("C1", "名字"); $phpExcel->getActiveSheet()->setCellValue("D1", "電話"); $phpExcel->getActiveSheet()->setCellValue("E1", "郵箱"); $phpExcel->getActiveSheet()->setCellValue("F1", "城市"); $i = 2; foreach ($data as $k => $v){ $phpExcel->getActiveSheet()->setCellValue("A".$i, $v['uid']); $phpExcel->getActiveSheet()->setCellValue("C".$i, $v['truename']); $phpExcel->getActiveSheet()->setCellValue("D".$i, $v['mobile']); $phpExcel->getActiveSheet()->setCellValue("E".$i, $v['email']); $phpExcel->getActiveSheet()->setCellValue("F".$i, $v['city']); $i++; } $fileext = '.xlsx'; $objWriter = \PHPExcel_IOFactory::createWriter($phpExcel, 'Excel2007'); $t2 = microtime(true); $filename = 'phpexcel耗時:'.($t2 - $t1); // dump($data); // 檔案儲存路徑 $path = preg_replace('(/+)', '/', storage_path('/tempdoc')); if (!is_dir($path)) { @mkdir($path, 0755, true); } $pathToFile = $path . '/' . date('YmdHis') . $filename . $fileext; $objWriter->save($pathToFile); if (file_exists($pathToFile)) { $headers = [ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'Content-Length' => filesize($pathToFile), 'Content-Disposition' => 'attachment; filename="' . $filename . '"' ]; return response()->download($pathToFile, $filename, $headers); } else { return response_json(0, [], '匯出錯誤,請重新整理頁面後重試'); } } public function phpByXls($data){ $title = [ 'id', '名字', '電話', '郵箱', '城市' ]; $t1 = microtime(true); $writer = new \XLSXWriter(); $sheet1 = 'sheet1'; //設定標題頭,指定樣式 $styles1 = array('font' => '宋體', 'font-size' => 10, 'font-style' => 'bold', 'fill' => '#8DEEEE', 'halign' => 'center', 'border' => 'left,right,top,bottom'); $writer->writeSheetRow($sheet1, $title, $styles1); $styles2 = ['height' => 25];//設定單元格的高度 foreach ($data as $row) { $writer->writeSheetRow($sheet1, $row,$styles2); } $t2 = microtime(true); $filename = 'phpxls耗時:'.($t2 - $t1); $fileext = '.xlsx'; // 檔案儲存路徑 $path = preg_replace('(/+)', '/', storage_path('/tempdoc')); if (!is_dir($path)) { @mkdir($path, 0755, true); } $pathToFile = $path . '/' . date('YmdHis') . $filename . $fileext; $writer->writeToFile($pathToFile);exit(); }
匯出10000條資料
匯出30000條資料
匯出50000條資料
匯出100000條資料
經過測試xlswriter時間記憶體爽壓制PhpSpreadsheet,且匯出資料越大對比越明顯
效能比較php_xlswrite > phpspreadsheet > phpexcel