
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
- CPU:Intel Core i5
- Memory:16GB 2133MHz LPDDR3
测试数据
ABCDEFGHIJKLMNOPQRSTUVWXYZ
导出
两种内存模式导出50万行数据(每行20列)
- 普通模式:耗时 16S,内存 991.8 MB;
- 固定内存模式:耗时 24S,内存 <1 MB;
读取
50万行数据(单行20列)
- 游标模式:耗时 23S,内存仅 <1 MB;
- 回调模式:耗时 24S,内存仅 <1 MB;
安装
Unix
pecl install xlswriter
Windows
快速上手
普通模式导出
$config = [
'path' => '/home/viest/xlswriter'
];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('tutorial.xlsx', 'sheet1')
->header(['Item', 'Cost'])
->data([
['Rent', 1000],
['Gas', 100],
['Food', 300],
['Gym', 50],
])
->output();
固定内存模式导出
$config = [
'path' => '/home/viest/xlswriter'
];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->constMemory('tutorial.xlsx', 'sheet1')
->header(['Item', 'Cost'])
->data([
['Rent', 1000],
['Gas', 100],
['Food', 300],
['Gym', 50],
])
->output();
游标模式读取
$config = [
'path' => '/home/viest/xlswriter'
];
$excel = new \Vtiful\Kernel\Excel($config);
$sheet = $excel->openFile('tutorial.xlsx')
->openSheet();
while ($row = $sheet->nextRow()) {
var_dump($row);
}
回调模式读取
$config = [
'path' => '/home/viest/xlswriter'
];
$excel = new \Vtiful\Kernel\Excel($config);
$excel
->openFile('tutorial.xlsx')
->nextCellCallback(function ($row, $cell, $data) {
//
});
性能对比
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 |