V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Vikin
V2EX  ›  PHP

为性能而生, PHP Excel 扩展 xlswriter 1.3.3 发布!

  •  2
     
  •   Vikin · 2019-12-27 11:20:35 +08:00 · 4743 次点击
    这是一个创建于 1574 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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。

    仓库地址

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

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

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

    文档

    https://xlswriter-docs.viest.me

    End

    最后的最后请不要忘记 star

    4 条回复    2019-12-27 12:36:20 +08:00
    codespots
        1
    codespots  
       2019-12-27 11:43:30 +08:00
    不错,点赞
    littleylv
        2
    littleylv  
       2019-12-27 11:52:30 +08:00
    看起来很不错的样子 👍
    zhs227
        3
    zhs227  
       2019-12-27 12:31:32 +08:00
    很强大,文档也做的很好看。
    sunorg
        4
    sunorg  
       2019-12-27 12:36:20 +08:00
    贡献了第一个 star,跟抢到了第一个沙发一样爽
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1219 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 23:25 · PVG 07:25 · LAX 16:25 · JFK 19:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.