简单 Excel 导入导出库, 欢迎使用和提意见

查看 19|回复 0
作者:edk24   
composer 包地址: https://packagist.org/packages/yuxiaobo/simple-excel
github 源代码: https://github.com/edk24/simple-excel
开发这个库的初衷是为了快速完成导入导出的功能开发, 一个人做项目的时候 时间就是金钱 哈哈
你有什么好的想法也欢迎提出, 我会继续打磨完善的.
🌈 简单使用, 方便快捷。 支持 xls xlsx csv 🌸
依赖:PhpSpreadsheet
使用 🎉
要求 php >= 7.3
导入
$arr = SimpleExcel::import(dirname(__DIR__) . '/test/test.xlsx', 'xlsx', array(
    '姓名'      => 'name',
    '年龄'      => 'age',
    '性别'      => 'gender'
));
var_dump($arr);
导出
// 导出到文件
SimpleExcel::export('/tmp/dump.xlsx', 'xlsx', [
    'name'      => '姓名',
    'idcard'    => '身份证',
    'mobile'    => '手机号'
], [
    ['name' => '张三', 'idcard' => '`522131199703213342', 'mobile'=>'18311548011'],
    ['name' => '李四', 'idcard' => '`522131199703213342', 'mobile' => '18311548011'],
    ['name' => '赵五', 'idcard' => '`522131199703213342', 'mobile' => '18311548011'],
],'#ff0000', '#00ff00', '#333333');
// 直接下载导出数据
SimpleExcel::setDownloadHeader('导出数据.xlsx'); // 设置下载文件响应头
SimpleExcel::export('php://output', 'xlsx', [
    'name'      => '姓名',
    'idcard'    => '身份证',
    'mobile'    => '手机号'
], [
    ['name' => '张三', 'idcard' => '`522131199703213342', 'mobile'=>'18311548011'],
    ['name' => '李四', 'idcard' => '`522131199703213342', 'mobile' => '18311548011'],
    ['name' => '赵五', 'idcard' => '`522131199703213342', 'mobile' => '18311548011'],
],'#ff0000', '#00ff00', '#333333');
常见问题 ❓
1. 导入或导出几十万条数据失败
⭐️ 解决办法只有两个 ⭐️
  • ① 分批导入或者导出
  • ② 数据量较大建议做成异步队列,避免影响主业务

    2. 内存超出使用限制
    Allowed memory size of 8388608 bytes exhausted (tried to allocate 1298358 bytes)
    上述问题是由于内存不足导致的,可能是有死循环,或者代码对内存的使用量比较大。
    临时解决办法:ini_set('memory_limit', '256M');
    数据量太大的话,建议导出、导入做成异步任务
    🌸 优化建议 🌸
  • ① 尽量不要使用框架模型,使用大 DB 查数据(以 thinkphp 为例)能明显优化内存与任务耗时
  • ② 只查询需要的字段
  • ③ 使用游标分批查询数据
  • ④ 耗时任务强烈建议做成异步队列的方式!!!不要犟,避免影响主业务

    3. 请求超时
    临时解决:ini_set('max_execution_time', 600);
    也需要注意一下 nginx 的最大保持 http 请求时间
    数据量太大的话,建议导出、导入做成异步任务
    🌸 优化建议 🌸
  • ① 可以临时通过增加 php 执行时间解决 ini_set('max_execution_time', 600);
  • ② 忘记说了,也需要对应增加 nginx/apache 的 http 请求保持时间,它在你的上层~
  • ③ 耗时任务强烈建议做成异步队列的方式!!!不要犟,避免影响主业务

    4. 数字太长变成 E+
    导出时在前面加个单元号或者反单元号,如身份证:522131199703253412 改成 '522131199703253412
    5. 大数据导出
    🌸 建议 🌸

    使用 csv 替代 xlsx ,xls 最大行 65536 ,xlsx 最大行 1048576 (一百万), csv 没有限制

  • ① 如果你是处理大数据,不要用这个库, 直接用 php 的 fputcsv 和 fgetcsv
  • ② 导出几百万上千万的数据,怎么打开?用 UltraEdit 即可,很🐂🍺的

    6. 空行忽略
    遇到空行数据默认是跳过的
    可以通过 simpleExcel::import() 函数的参数 4 ignoreEmptyRow 设置
  • 您需要登录后才可以回帖 登录 | 立即注册

    返回顶部