我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP如何用xlswriter优化Excel导出性能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP如何用xlswriter优化Excel导出性能

这篇文章主要介绍了PHP如何用xlswriter优化Excel导出性能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP如何用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/binpecl install xlswriterdocker-php-ext-enable xlswriterphp -mphp --ri xlswriterVersion => 1.3.6docker 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());}function downloadXLSX(string $filename, array $header, array $list): string{    try {        $config = ['path' => getTmpDir() . '/'];        $excel  = (new \Vtiful\Kernel\Excel($config))->fileName($filename.'.xlsx', 'Sheet1');        $fileHandle = $excel->getHandle();        $format1    = new \Vtiful\Kernel\Format($fileHandle);        $format2    = new \Vtiful\Kernel\Format($fileHandle);        // title style        $titleStyle = $format1->fontSize(16)            ->bold()            ->font("Calibri")            ->align(\Vtiful\Kernel\Format::FORMAT_ALIGN_CENTER, \Vtiful\Kernel\Format::FORMAT_ALIGN_VERTICAL_CENTER)            ->toResource();        // global style        $globalStyle = $format2->fontSize(10)            ->font("Calibri")            ->align(\Vtiful\Kernel\Format::FORMAT_ALIGN_CENTER, \Vtiful\Kernel\Format::FORMAT_ALIGN_VERTICAL_CENTER)            ->border(\Vtiful\Kernel\Format::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 (\Vtiful\Kernel\Exception $e) {        return $e->getMessage();    }}

如果发现下载的文件有时候打不开,那应该是你使用了官方的DEMO,问题出在 filesize(),这个函数是有缓存的,所以你会发现下载下来的文件和原始的文件大小不一样。要么像我一样不去设置 Content-Length,要么使用 clearstatcache()手动清除缓存。

实测5w条记录导出耗时1.5s,效果还是很强劲的。

导出效果
PHP如何用xlswriter优化Excel导出性能

关于“PHP如何用xlswriter优化Excel导出性能”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“PHP如何用xlswriter优化Excel导出性能”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP如何用xlswriter优化Excel导出性能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP如何用xlswriter优化Excel导出性能

这篇文章主要介绍了PHP如何用xlswriter优化Excel导出性能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP如何用xlswriter优化Excel导出性能文章都会有所收获,下面我们一起来看看吧。关
2023-07-05

PHP如何使用xlswriter进行大数据的导入导出?(详解)

PHP如何使用xlswriter进行大数据的导入导出?下面本篇文章给大家介绍一下PHP大数据xlswriter导入导出(最优数据化)的方法,希望对大家有所帮助!本文介绍基于PHP扩展xlswriter的Vtiful\Kernel\Excel类可以支持无限层级的复杂表头导出!后续也可能会持续更新优化一、准备xlswriter扩展1、windows系统:到PECL网站下载符合自己本地PHP环境的ddl文
2022-07-07

如何用php性能优化函数?

在PHP开发过程中,性能优化是一个重要的课题,特别是在处理大量数据或高并发请求的情况下。为了提升网站的响应速度和用户体验,我们需要采用一些性能优化技巧。本文将介绍一些常用的PHP性能优化函数,并给出具体的代码示例,帮助开发者更好地理解和应用
2023-10-21

PHP接口性能优化之输入输出流优化(如何优化PHP接口中的输入输出流以提升性能?)

输入输出流优化对于PHP接口性能至关重要。可以通过以下策略优化输入输出流:使用缓冲、文件缓存和gzip压缩。启用异步I/O并使用高效的序列化格式。减少复制、预加载、减少错误处理和使用lazyloading。使用并行处理和性能分析工具。通过实施这些策略,可以显著提升输入输出流性能,从而提高整体系统效率和用户体验。
PHP接口性能优化之输入输出流优化(如何优化PHP接口中的输入输出流以提升性能?)
2024-04-02

如何使用 PHP 优化网站性能?

如何优化 php 网站性能,提升用户体验?优化代码:避免使用全局变量,使用缓存,将重复代码提炼为函数,减少循环。优化数据库查询:创建索引,使用查询缓存,限制查询结果,使用分页。优化文件操作:使用文件缓存,使用文件锁,使用 fopen() 和
如何使用 PHP 优化网站性能?
2024-04-19

PHP 函数如何优化性能?

优化 php 函数性能至关重要,以下方法可提高效率:优化参数传递:避免按引用传递大对象、按值传递大数组,考虑使用引用或流。减少复杂度:使用简单的数据结构、分解算法、减少循环嵌套。减少 i/o 操作:分组数据库查询、使用文件缓存、使用 cdn
PHP 函数如何优化性能?
2024-04-10

如何使用 PHP 优化网站性能

通过优化数据库查询、压缩页面和资源、启用页面缓存、优化 php 代码和加载资源,可以有效提升 php 网站性能。例如,一家电子商务网站采用页面缓存、数据库索引优化和 gzip 压缩,网站加载时间减少了 60%,转化率提高了 25%。如何使用
如何使用 PHP 优化网站性能
2024-05-02

如何优化 PHP 函数的性能?

优化 php 函数性能的技巧包括:缓存函数输出,避免重复执行。减少函数调用开销,通过预先计算或存储变量。使用较快的算法,例如二分查找而不是线性查找。利用 php 扩展,例如ioncube,以增强函数性能。优化数据库查询,使用索引、优化查询语
如何优化 PHP 函数的性能?
2024-05-03

PHP 函数的性能如何优化?

php 函数性能优化涉及以下技巧:缓存查询结果以避免多次执行相同查询。优化查询,仅返回所需的特定数据。使用数据库索引以提高查询效率。利用 php 内置函数,如 array_merge(),提高性能。避免不必要的数据转换,使用正确的数据类型。
PHP 函数的性能如何优化?
2024-04-16

C#中如何使用NPOI实现Excel导入导出功能

本文小编为大家详细介绍“C#中如何使用NPOI实现Excel导入导出功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#中如何使用NPOI实现Excel导入导出功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-06-29

如何优化 PHP 微服务容器化性能

为了优化 php 微服务容器化性能,可以采用以下技巧:选择轻量级 php 镜像优化 php 配置设置(例如,启用 opcache)使用容器缓存(例如,redis)执行代码优化和管理依赖项设置适当的容器资源限制并使用 hpa 进行自动调整如何
如何优化 PHP 微服务容器化性能
2024-05-08

C++ 函数优化详解:如何优化输入输出性能?

通过以下优化技术可提高 c++++ 中的输入输出性能:1. 使用文件指针;2. 使用流;3. 使用缓存;4. 优化 i/o 操作(批量 i/o、异步 i/o、内存映射 i/o)。C++ 函数优化详解:如何优化输入输出性能?输入输出 (I/
C++ 函数优化详解:如何优化输入输出性能?
2024-05-04

如何优化Golang应用性能

标题:优化Golang应用性能的几种方法及具体代码示例随着Golang在互联网领域的广泛应用,对于Golang应用性能的要求也越来越高。本文将介绍几种优化Golang应用性能的方法,并提供具体的代码示例,帮助开发者更好地理解如何提高应用的
如何优化Golang应用性能
2024-03-05

如何使用PHP原生来导出Excel和CSV文件

这篇文章主要介绍“如何使用PHP原生来导出Excel和CSV文件”,在日常操作中,相信很多人在如何使用PHP原生来导出Excel和CSV文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用PHP原生来导
2023-06-20

PHP 函数的性能优化如何实现?

优化 php 函数性能的关键技术:缓存结果避免重复运算减少函数调用复杂度,分解为简单函数使用 php 内置优化函数避免不必要的类型转换实战案例:缓存 get_product_data 函数从数据库获取的产品数据,提升了函数性能。PHP 函数
PHP 函数的性能优化如何实现?
2024-04-18

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录