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

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
仓库地址
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 协议》,转载必须注明作者和本文链接
本帖由系统于 5年前 自动加精
关于 LearnKu
厉害
用来读取xlsx文件,非常不错。非常感谢作者。
性能是真的强,有时间试试。感谢作者~
已经用在项目里了,原来用 PHPSpreadSheet ,有个大文件导出需要几分钟的时间。换了 Xlswriter 只需要十几秒。
会考虑加上上传文件写操作吗?
前端处理,转成数据结构就不香了?
首先明确一点,仅个人观点。后端应该只处理权限操作。渲染和处理结构交给前端。做前端的别来喷我。我也做前端,但是我也做后端。这就是前端应该做的事情!!!后端不要把计算性能什么的浪费在这些事情上。
PHP 少安装点拓展。
@medz 一般前端需要怎么处理呢,有什么库支持吗。导入的话,把 Excel 解析好再发给后端吗( json格式post出去? ),那种几十兆的文件能不能搞。导出的话,好像是个不错的方案。
不错,挺好使的
关于读取excel:
path 不支持相对路径吗 。 只能是绝对路径 相对路径怎么配置
看了楼主的文章,和小哥关于前端处理的思路。感觉结合起来会非常好,导入用前端处理数据;导出后端用
xlswriter处理。两全其美,岂不快哉!我记得你, 以前别人在群里发了你的扩展,我看了不错想用,但是我们主要业务是导入,你插件当时只有导出,然后我们导入频繁内存溢出。。 很蛋疼,然后群里艾特你。最后你说有时间写一下。。但是等我离职了你还没写完。
@白小白 意思就是 下次一定
我还说喜欢PHPSpreadSheet,可以迭代器导入导出,主要是不用安装扩展
@di-gua 用while去读就知道是否读完了, 最后一行是null
你的文档gitbook界面是怎么弄的,默认的太丑了
Niubility,但是仅支持xlsx格式读取吗?
推荐一个功能丰富、兼容性好、高性能的 Excel 文档基础库:github.com/xuri/excelize
我composer 安装的,一直读空数据,结果一看源码,全是返回空数组,这是撒意思啊?