[xlswriter] PHP 高性能 Excel 扩展完全适配 Windows,与 PHPSpreadSheet、PHP_XLSXWriter 对比,内存、时间双碾压!

【xlswriter】PHP 高性能 Excel 扩展已适配 Windows

xlswriter是一个 PHP C 扩展,可用于在 Excel 2007+ XLSX 文件中读取数据,插入多个工作表,写入文本、数字、公式、日期、图表、图片和超链接。

它具备以下特性:

一、写入
  • 100%兼容的Excel XLSX文件
  • 完整的Excel格式
  • 合并单元格
  • 定义工作表名称
  • 过滤器
  • 图表
  • 数据验证和下拉列表
  • 工作表PNG/JPEG图像
  • 用于写入大文件的内存优化模式
  • 适用于Linux,FreeBSD,OpenBSD,OS X,Windows
  • 编译为32位和64位
  • FreeBSD许可证
  • 唯一的依赖是zlib
二、读取
  • 完整读取数据
  • 光标读取数据
  • 按数据类型读取
  • xlsx 转 CSV

性能对比

先感谢网友提供数据

测试数据:20列,每列长度为19英文字母

Xlswriter

行数(万) 常规模式内存(MB) 常规模式耗时(S) 固定内存模式内存(MB) 固定内存模式耗时(S)
0.1 12.57 0.056 <1 0.0896
0.3 16.42 0.104 <1 0.1664
0.5 18.82 0.175 <1 0.28
1 29.35 0.36 <1 0.576
5 127.87 1.806 <1 2.8896
10 251.91 3.576 <1 5.7216
15 376.98 5.316 <1 8.5056
20 499.94 7.012 <1 11.2192

PHPSpreadSheet

行数(万) 内存(MB) 耗时(S)
0.1 11.31 0.632
0.3 28.51 1.271
0.5 48.47 2.219
1 95.58 4.443
5 457.94 24.003
10 914.52 52.824
15 1437.11 104.306
20 1827.69 130.093

PHP_XLSXWriter

行数(万) 内存(MB) 耗时(S)
0.1 5.55 0.213
0.3 5.55 0.627
0.5 5.47 1.035
1 5.27 2.066
5 5.51 10.373
10 5.37 20.557
15 5.42 31.328
20 5.35 41.505

安装

Unix

pecl install xlswriter

Windows

download dll

仓库地址

Github:https://github.com/viest/php-ext-excel-exp...

Gitee:https://gitee.com/viest/php-ext-xlswriter

PECL:https://pecl.php.net/package/xlswriter

文档

https://xlswriter-docs.viest.me

End

最后的最后请不要忘记 star

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 3年前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 32

用来读取xlsx文件,非常不错。非常感谢作者。

4年前 评论

性能是真的强,有时间试试。感谢作者~

4年前 评论

已经用在项目里了,原来用 PHPSpreadSheet ,有个大文件导出需要几分钟的时间。换了 Xlswriter 只需要十几秒。

4年前 评论

会考虑加上上传文件写操作吗?

4年前 评论
medz

前端处理,转成数据结构就不香了?

首先明确一点,仅个人观点。后端应该只处理权限操作。渲染和处理结构交给前端。做前端的别来喷我。我也做前端,但是我也做后端。这就是前端应该做的事情!!!后端不要把计算性能什么的浪费在这些事情上。

4年前 评论
medz

PHP 少安装点拓展。

4年前 评论

@medz 一般前端需要怎么处理呢,有什么库支持吗。导入的话,把 Excel 解析好再发给后端吗( json格式post出去? ),那种几十兆的文件能不能搞。导出的话,好像是个不错的方案。

4年前 评论
medz 4年前
medz 4年前

不错,挺好使的

4年前 评论

关于读取excel:

  • 希望增加一个 一行一行地回调模式读取的函数:nextRowCallback
  • 或者为 nextRow 增加一个可以判断 有没有到文件结尾的 函数
4年前 评论

path 不支持相对路径吗 。 只能是绝对路径 相对路径怎么配置

3年前 评论
viest (楼主) 3年前

看了楼主的文章,和小哥关于前端处理的思路。感觉结合起来会非常好,导入用前端处理数据;导出后端用 xlswriter 处理。两全其美,岂不快哉!

3年前 评论

我记得你, 以前别人在群里发了你的扩展,我看了不错想用,但是我们主要业务是导入,你插件当时只有导出,然后我们导入频繁内存溢出。。 很蛋疼,然后群里艾特你。最后你说有时间写一下。。但是等我离职了你还没写完。

3年前 评论
viest (楼主) 3年前
WhiteDragon (作者) 3年前
viest (楼主) 3年前

@白小白 意思就是 下次一定

3年前 评论
viest (楼主) 3年前

我还说喜欢PHPSpreadSheet,可以迭代器导入导出,主要是不用安装扩展 :joy:

3年前 评论
viest (楼主) 3年前
alante

@di-gua 用while去读就知道是否读完了, 最后一行是null

3年前 评论
JerryBool 3年前

你的文档gitbook界面是怎么弄的,默认的太丑了

3年前 评论

Niubility,但是仅支持xlsx格式读取吗?

3年前 评论
viest (楼主) 3年前
xuri

推荐一个功能丰富、兼容性好、高性能的 Excel 文档基础库:github.com/xuri/excelize

3年前 评论

我composer 安装的,一直读空数据,结果一看源码,全是返回空数组,这是撒意思啊?

file

3年前 评论
JerryBool 3年前

file file 导入的表格有特殊字符我用PhpSpreadsheet是可以识别的,但是用XlsWriter确转义成_x0008_代码了,请问需要怎么做 代码:$sheet_data = $this->excel ->openFile($this->file_name) ->openSheet() ->getSheetData();

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!