xlswriter 是一个 PHP C 扩展,可用于在 Excel 2007+ XLSX 文件中读取数据,插入多个工作表,写入文本、数字、公式、日期、图表、图片和超链接。
它具备以下特性:
一、写入
100 %兼容的 Excel XLSX 文件
完整的 Excel 格式
合并单元格
定义工作表名称
过滤器
图表
数据验证和下拉列表
工作表 PNG/JPEG 图像
用于写入大文件的内存优化模式
适用于 Linux,FreeBSD,OpenBSD,OS X,Windows
编译为 32 位和 64 位
FreeBSD 许可证
唯一的依赖是 zlib
二、读取
完整读取数据
光标读取数据
按数据类型读取
xlsx 转 CSV
基准测试
测试环境: Macbook Pro 13 inch, Intel Core i5, 16GB 2133MHz LPDDR3 Memory, 128GB SSD Storage.
导出
两种内存模式导出 100 万行数据(每行 27 列,数据类型均为字符串,单个字符串长度为 19 )
普通模式:耗时 29S,内存只需 2083MB;
固定内存模式:仅需 52S,内存仅需 <1MB;
导入
100 万行数据(单行 1 列,数据类型为 INT )
全量模式:耗时 3S,内存仅 558MB;
游标模式:耗时 2.8S,内存仅 <1MB;
部分特性示例
XLSX 转 CSV [常规模式]
应用场景
较多的 xlsx 文件碎片,合并为单一 CSV 文件,统一处理;
xlsx 文件新增的速度大于任务处理速度,可异步将文件转为 CSV 后,使用更高效的工具处理(例如:数据库工具直接导入 CSV );
示例
demo.php
$excel = new \Vtiful\Kernel\Excel(['path' => './tests']);
$filePath = $excel->fileName('tutorial.xlsx', 'TestSheet1')
->header(['String', 'Int', 'Double'])
->data([
['Item_1', 10, 10.9999995],
])
->output();
// 写入方式打开,将文件指针指向文件末尾。
$fp = fopen('./tests/file.csv', 'a');
// 将 xlsx 文件写入 CSV
$resultBoolOne = $excel->openFile('tutorial.xlsx')
->openSheet()
->putCSV($fp);
// 将 xlsx 文件追加写入 CSV
$resultBoolTwo = $excel->openFile('tutorial.xlsx')
->openSheet()
->putCSV($fp);
file.csv
String,Int,Double
Item_1,10,10.9999995
String,Int,Double
Item_1,10,10.9999995
xlsx 转 CSV [回调模式]
应用场景与常规模式类似,不同之处在于上层业务可以在回调函数中加工数据,将 xlsx 中的数据过滤加工并写入 csv。
仓库地址
文档
End
最后的最后请不要忘记 star