成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

詳解PHP用xlswriter優化Excel導出性能(附代碼示例)

本篇文章給大家帶來了關于php的相關知識,其中主要跟大家聊一聊xlswriter擴展是什么?怎么使用xlswriter擴展優化Excel導出性能,感興趣的朋友下面一起來看一下吧,希望對大家有幫助。

關于xlswriter

xlswriter 是一個 PHP C 擴展,旨在提升php在導出大數據量時的性能問題,支持 windows / Linux ??捎糜谠?Excel 2007+ XLSX 文件中讀取數據,插入多個工作表,寫入文本、數字、公式、日期、圖表、圖片和超鏈接。

它具備以下特性:

一、寫入

  • 100%兼容的 Excel XLSX 文件
  • 完整的 Excel 格式
  • 合并單元格
  • 定義工作表名稱
  • 過濾器
  • 圖表
  • 數據驗證和下拉列表
  • 工作表 PNG/JPEG 圖像
  • 用于寫入大文件的內存優化模式
  • 適用于 Linux,FreeBSD,OpenBSD,OS X,Windows
  • 編譯為 32 位和 64 位
  • FreeBSD 許可證
  • 唯一的依賴是 zlib

二、讀取

  • 完整讀取數據
  • 光標讀取數據
  • 按數據類型讀取
  • xlsx 轉 CSV
  • 性能對比
  • 先感謝網友提供數據

下載安裝

github源碼

https://github.com/viest/php-ext-xlswriter
登錄后復制

xlswriter 文檔

https://xlswriter-docs.viest.me/zh-cn/an-zhuang/huan-jing-yao-qiu
登錄后復制

下載 ide helper

composer require viest/php-ext-xlswriter-ide-helper:dev-master
登錄后復制

但是我一直下載失敗,于是去github倉庫直接下載 https://github.com/viest/php-ext-xlswriter-ide-helper
然后將里面的幾個類復制到一個 xlswriter_ide_helper.php 文件里面,將這個文件放到你的項目中就有代碼提示了。

安裝 xlswriter 擴展

此處在docker中安裝

docker exec -it php72-fpm bashcd /usr/local/bin pecl install xlswriter docker-php-ext-enable xlswriter php -m  php --ri xlswriter Version => 1.3.6  docker restart php72-fpm
登錄后復制

性能測試:

測試數據:20 列,每列長度為 19 英文字母

Xlswriter

詳解PHP用xlswriter優化Excel導出性能(附代碼示例)

PHPSpreadSheet

詳解PHP用xlswriter優化Excel導出性能(附代碼示例)

PHP_XLSXWriter

詳解PHP用xlswriter優化Excel導出性能(附代碼示例)

使用示例:

private function rankPersonExport($activityInfo, $list){     $date = date('Y-m-d');     $filename = "{$activityInfo['orgname']}-{$activityInfo['name']}-個人排行榜-{$date}";     $header = ['名次', '用戶ID', '對接賬號', '姓名', '電話', '部門ID', '一級部門', '二級部門', '三級部門', '總積分', '最后積分時間', "毫秒"];     if (!empty($activityInfo['ext'])) {         $extArr = json_decode($activityInfo['ext'], true);         foreach ($extArr as $errItem) {             array_push($header, $errItem['name']);         }     }     // list     $listVal = [];     foreach($list as $v){         $temp = [             $v['rank'],             $v['userid'],             $v['userName'],             $v['nickName'],             $v['phone'],             $v['departid'],             $v['topDepartName'],             $v['secDepartName'],             $v['thirdDepartName'],             $v['score'],             $v['updatetime'],             $v['micro'],         ];          if (!empty($v['ext'])) {             $extArr = explode('|', $v['ext']);             foreach ($extArr as $k2 => $v2) {                 $errItemArr = explode('^', $v2);                 array_push($temp, $errItemArr[1]);             }         }         array_push($listVal, $temp);     }      $re = downloadXLSX($filename, $header, $listVal);     if($re){         return $this->output(0, $re);     }else{         return $this->output(1, 'success');     }}
登錄后復制

function getTmpDir(): string{     $tmp = ini_get('upload_tmp_dir');      if ($tmp !== False && file_exists($tmp)) {         return realpath($tmp);     }      return realpath(sys_get_temp_dir());}/**  * download xlsx file  *  * @param string $filename  * @param array $header  * @param array $list  * @return string errmsg  */function downloadXLSX(string $filename, array $header, array $list): string{     try {         $config = ['path' => getTmpDir() . '/'];         $excel  = (new VtifulKernelExcel($config))->fileName($filename.'.xlsx', 'Sheet1');         $fileHandle = $excel->getHandle();         $format1    = new VtifulKernelFormat($fileHandle);         $format2    = new VtifulKernelFormat($fileHandle);          // title style         $titleStyle = $format1->fontSize(16)             ->bold()             ->font("Calibri")             ->align(VtifulKernelFormat::FORMAT_ALIGN_CENTER, VtifulKernelFormat::FORMAT_ALIGN_VERTICAL_CENTER)             ->toResource();          // global style         $globalStyle = $format2->fontSize(10)             ->font("Calibri")             ->align(VtifulKernelFormat::FORMAT_ALIGN_CENTER, VtifulKernelFormat::FORMAT_ALIGN_VERTICAL_CENTER)             ->border(VtifulKernelFormat::BORDER_THIN)             ->toResource();          $headerLen = count($header);          // header         array_unshift($list, $header);          // title         $title = array_fill(1, $headerLen - 1, '');         $title[0] = $filename;         array_unshift($list, $title);          $end = strtoupper(chr(65 + $headerLen - 1));         // column style         $excel->setColumn("A:{$end}", 15, $globalStyle);         // title         $excel->MergeCells("A1:{$end}1", $filename)->setRow("A1", 25, $titleStyle);         // 凍結前兩行,列不凍結         $excel->freezePanes(2, 0);         // 數據         $filePath = $excel->data($list)->output();          header("Content-Disposition:attachment;filename={$filename}.xlsx");          $re = copy($filePath, 'php://output');         if ($re === false) {             $err = 'failed to write output';         } else {             $err = '';         }         @unlink($filePath);          return $err;     } catch (VtifulKernelException $e) {         return $e->getMessage();     }}
登錄后復制

如果發現下載的文件有時候打不開,那應該是你使用了官方的DEMO,問題出在 filesize(),這個函數是有緩存的,所以你會發現下載下來的文件和原始的文件大小不一樣。要么像我一樣不去設置 Content-Length,要么使用 clearstatcache()手動清除緩存。

實測5w條記錄導出耗時1.5s,效果還是很強勁的。

導出效果
詳解PHP用xlswriter優化Excel導出性能(附代碼示例)

推薦學習:《PHP視頻教程》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
免费无码AV片在线观看| 欧美人妻精品一区二区| 另类小说激情婷婷久久| 蜜臀AV无码一区二区三区| 蜜桃中文字日产乱幕| 欧美性爱乱伦视频| 日韩免费无码专区精品观看| 挺进邻居漂亮的娇妻| 亚洲AV无码成人精品涩涩| 亚洲色无码中文字幕手机在线| 阳台顶着岳刘晓莉的肥臀| 中文字幕精品一区二区精品| JAPANESE人妻少妇| 国产AV人人夜夜澡人人爽| 国产一区二区三区影院| 久久精品国产亚洲夜色AV网站| 免费观看A级毛片视频| 人人爽人人澡人人高潮| 玩弄肥美高大的熟妇| 亚洲精品乱码久久久久久自慰| 在线观看亚洲AV电影网站| www.五月婷婷.com| 国产精品久免费的黄网站| 精品无码黑人又粗又大又长| 男生晚上睡不着想看B站 | 国产精品香蕉成人网在线观看| 好男人2019在线视频播放观看| 久久久久亚洲AV无码网站少妇| 欧美日韩一区二区综合| 玩弄丰满熟妇XXXXX性60| 亚洲男人第一AV网站| HD老熟女BBN| 国产乱人伦偷精品视频下| 久久欧美极品少妇XXXXⅩ| 人妻少妇伦在线无码专区视频| 无码aⅴ精品一区二区三区浪潮| 亚洲日本VA中文字幕久久道具| 99热门精品一区二区三区无码 | 三级4级全黄60分钟| 亚洲AV无码专区国产乱码电影| 2019理论韩国理论中文| 国产成人精选视频在线观看| 久久99久久99精品免观看吃奶| 人摸人人人澡人人超碰手机版| 无码中文字幕日韩专区视频| 曰曰摸夜夜添夜夜添高潮出水| 处破女轻点疼丨98分钟| 精品无码国产自产野外拍在线| 人妻少妇精品中文字幕AV| 亚洲AV无码一区二区三区在线播| 51无人区码一码二码三码免费| 国产丰滿老熟女多毛hD| 狼人视频国产在线视频WWW色| 色婷婷亚洲一区二区综合| 亚洲最新无码成AV人| 公交车里抓着摇曳的手环诗情| 久久国产AVJUST麻豆| 色费女人18毛片A级毛片视频| 亚洲一区二区三区AV无码蜜桃| 成人H动漫无码网站| 精品亚洲成A人片在线观看少妇| 人妻无码AⅤ中文字幕视频| 亚洲国产精品久久久久秋霞影院| めんたいさんでぃふぇんすっ甘雨| 黑人荫道BBWBBB大荫道| 日韩精品人成在线播放| 一本加勒比HEZYO中文无码 | 精品少妇一区二区| 色偷偷亚洲第一成人综合网址| 亚洲中文字幕无码AV在线| 国产成人AV乱码免费观看| 免费中国帅气体育生GARY| 亚洲AV无码丰满尖叫高潮| 成年女人WWXX免费国产| 久久人妻蜜桃一区二区三区| 无码AV在线一本无码| HD2LINODE日本成熟IP| 精品少妇人妻AV无码专区| 特黄特色三级在线观看| AV无码中文字幕不卡一区二区三| 精产国品一二二线三线区别| 熟妇人交VIDEOS复古| 99RE6在线视频精品免费| 精品国产亚洲第一区二区三区 | 免费人妻无码不卡中文字幕18禁| 午在线亚洲男人午在线| 成人欧美一区二区三区视频| 蜜臀AV无码精品人妻色欲| 亚洲国产欧美在线观看片不卡| 够了够了到高C了好多水视频| 欧美黑人巨大XXXX黑人猛交| 野花高清在线观看免费官网中文版 | 国产午夜福利在线观看红一片| 人妻少妇粗大持久满足| 中文字幕久久久久人妻中出| 精品麻豆一区二区三区乱码| 无码夫の前で人妻を犯す中字| 八戒八戒WWW资源高清| 绿帽娇妻在卧室疯狂的呻吟| 亚洲AV永久无码精品尤物| 国产成人亚洲综合| 日本少妇ASS浓精PICS| 91人妻一区二区三区蜜桃| 久久久久久精品无码人妻| 亚洲第一极品精品无码久久| 国产精品免费高清在线观看| 日韩人妻无码一区二区三区| H国产小视频福利免费视频 | 一炕四女被窝交换| 精品黑人一区二区三区| 性高朝久久久久久久3小时| 国产成人AⅤ片在线观看| 日韩精品一区二区三区中文 | 欧美人与性动交Α欧美精品| 稚嫩奶罩伸进揉捏H| 久久精品人妻一区二区三区一 | 中文字幕AV在线一二三区| 久久精品国产亚洲AV日韩 | 中文字幕久久久久久精品| 久久天天躁夜夜躁狠狠躁| 亚洲欧洲成人AV电影网| 妓女妓女一区二区三区在线观看| 性生交大片免费看淑女出招| 国产精品久久久久久TV| 玩弄CHANEL妇熟女| 国产高清在线观看AV片| 无码AV中文字幕出轨人妻 | GOGO人体大胆瓣开下部L| 欧美国产综合欧美视频| 97免费公开在线视频| 欧美成人综合久久精品| AV天堂午夜精品一区| 欧美性婬爽www视频播放| JAPANESE娇小侵犯| 日本丰满少妇高潮呻吟| 成熟老太毛茸茸BBWBBW| 少妇被又大又粗又爽毛片久久黑人| 懂色av一区二区三区蜜臀| 色综合伊人色综合网站无码| 国产97在线 | 免费| 无码男男作爱G片在线观看| 国产精华液一二三区别| 五月丁香六月午夜成人影院| 国产午夜成人无码免费| 亚洲第一无码AV播放器下载| 久久99精品久久久久久9蜜桃| 野花社区日本免费图片| 美女内射无套日韩免费播放| 97人人超碰国产精品最新O| 欧美自拍亚洲综合在线| 超鹏97国语在线| 太平公主秘史在线观看免费| 国产裸拍裸体视频在线观看 | 精品久久久久久国产牛牛| 亚洲熟妇AV一区二区三区漫画| 久久久无码精品亚洲日韩蜜臀浪潮| 一区二区三区AV高清免费波多| 免费免APP看大片视频播放器 | 亚洲日本一线产区和二线产| 久久亚洲国产成人精品无码区| 51精品国产人成在线观看| 人人爽人人片人人片AV| 国产浮力第一页草草影院| 亚洲AV无码成人片在线观看 | 一本大道久久精品 东京热| 女女互磨互喷水高潮LES呻吟| 啊灬啊灬啊灬啊灬快灬高潮了| 少妇被又大又粗又爽毛片久久黑人 | 亚洲少妇一区二区视频| 妺妺窝人体色WWW聚色窝仙踪| 把腿张开老子臊烂你多P| 无码国产精品一区二区高潮| 护士猛少妇色ⅩⅩXXX猛叫| 一级伦奷片高潮无码看了5| 人妻中文字系列无码专区| 国产ww又大又粗又刺激孕妇| 亚洲AV无码之国产精品| 免费 成 人 黄 色 网站69| 粗大猛烈进出高潮视频| 亚洲AⅤ在线无码播放毛片一线天| 久久久久久亚洲AV成人无码国产| B里可以放多少个鸡蛋| 无码AV无码天堂资源网| 久久精品国产清高在天天线| BT天堂新版中文在线地址| 图片 小说 校园 激情 都市| 久久精品国产久精国产| 被多个男人调教奶头玩奶头| 性爱xxxx在线xxxx欧美| 两个病娇男友轮流爱我资源| 成人无码免费一区二区三区| 亚洲国产精品成人午夜在线观看 | 国产亚洲精久久久久久无码蜜桃 | 亚洲AV无码专区在线播放中文| 麻花豆传媒剧国产MV在线下载 | 少妇无码AV无码专区线| 久久99青青精品免费观看| 被夫上司强迫的女人在线中文| 亚洲AV无码成人YELLOW| 欧美猛少妇色XXXXX猛叫|