资讯专栏INFORMATION COLUMN

PHP读取超大的excel文件数据的方案

dkzwm / 3091人阅读

摘要:场景和痛点说明今天因为一个老同学找我,说自己公司的物流业务都是现在用处理,按月因为数据量大,一个差不多有百万数据,文件有接近,打开和搜索就相当的慢联想到场景要导入数据,可能数据量很大,这里利用常用的一些方法比如会常有时间和内存限制问题下面我

场景和痛点 说明
今天因为一个老同学找我,说自己公司的物流业务都是现在用excel处理,按月因为数据量大,一个excel差不多有百万数据,文件有接近100M,打开和搜索就相当的慢

联想到场景:要导入数据,可能excel数据量很大,这里利用常用的一些方法比如phpexcel会常有时间和内存限制问题

下面我们就利用一个利用流处理的类库SpreadsheetReader来做大excel的读取

编写过程 说明
关键具体在代码里注释
代码
Sheets();
if (!$sheets) {
    die("没有工作表");
}

//改变当前处理的工作表
$Reader->ChangeSheet(0);

//打印当前所在工作表的当前所在行数据
var_dump($Reader->current());

//因为reader类集成了Iter所以可以用迭代方式处理
//这里提醒 如果文件超大,这边的处理速度会过慢,不过不会引发内存性能问题
//$i = 0;
//foreach ($Reader as $Row)
//{
//    if ($i>=3) {
//        break;
//    }
//
//    echo $i . PHP_EOL;
//    print_r($Row);
//
//    $i++;
//}

$endTime = microtime(true);
$memoryUse = memory_get_usage();

echo "内存占用:" . convert($memoryUse) . "; 用时:" . ($endTime - $startTime) . PHP_EOL;
结果 测试说明
上面读取的example1.xlsx文件有100M左右,读写过慢,测试只开了读取当前默认工作表的当前所在行数据
因数据敏感,已做屏蔽
日志记录内存使用率
147.77 kb
array (size=50)
  0 => string "xxxxxxxxxxxxxx" (length=25)
  1 => string "xxxxxxxxxxxxxx" (length=15)
  2 => string "xxxxxxxxxxxxxx" (length=18)
  3 => string "xxxxxxxxxxxxxx" (length=12)
  4 => string "xxxxxxxxxxxxxx" (length=12)
  5 => string "xxxxxxxxxxxxxx" (length=12)
  6 => string "xxxxxxxxxxxxxx" (length=24)
  7 => string "xxxxxxxxxxxxxx" (length=12)
  8 => string "xxxxxxxxxxxxxx" (length=27)
  9 => string "xxxxxxxxxxxxxx" (length=12)
  10 => string "xxxxxxxxxxxxxx" (length=15)
  11 => string "xxxxxxxxxxxxxx" (length=28)
  12 => string "xxxxxxxxxxxxxx" (length=9)
  13 => string "xxxxxxxxxxxxxx" (length=12)
  14 => string "xxxxxxxxxxxxxx" (length=9)
  15 => string "xxxxxxxxxxxxxx" (length=6)
  16 => string "xxxxxxxxxxxxxx" (length=9)
  17 => string "xxxxxxxxxxxxxx" (length=3)
  18 => string "xxxxxxxxxxxxxx" (length=6)
  19 => string "xxxxxxxxxxxxxx" (length=3)
  20 => string "xxxxxxxxxxxxxx" (length=15)
  21 => string "xxxxxxxxxxxxxx" (length=15)
  22 => string "xxxxxxxxxxxxxx" (length=19)
  23 => string "xxxxxxxxxxxxxx" (length=13)
  24 => string "xxxxxxxxxxxxxx" (length=19)
  25 => string "xxxxxxxxxxxxxx" (length=12)
  26 => string "xxxxxxxxxxxxxx" (length=12)
  27 => string "xxxxxxxxxxxxxx" (length=12)
  28 => string "xxxxxxxxxxxxxx" (length=6)
  29 => string "xxxxxxxxxxxxxx" (length=12)
  30 => string "xxxxxxxxxxxxxx" (length=6)
  31 => string "xxxxxxxxxxxxxx" (length=15)
  32 => string "xxxxxxxxxxxxxx" (length=24)
  33 => string "xxxxxxxxxxxxxx" (length=18)
  34 => string "xxxxxxxxxxxxxx" (length=18)
  35 => string "xxxxxxxxxxxxxx" (length=24)
  36 => string "xxxxxxxxxxxxxx" (length=12)
  37 => string "xxxxxxxxxxxxxx" (length=18)
  38 => string "xxxxxxxxxxxxxx" (length=21)
  39 => string "xxxxxxxxxxxxxx" (length=9)
  40 => string "xxxxxxxxxxxxxx" (length=9)
  41 => string "xxxxxxxxxxxxxx" (length=18)
  42 => string "xxxxxxxxxxxxxx" (length=21)
  43 => string "xxxxxxxxxxxxxx" (length=15)
  44 => string "xxxxxxxxxxxxxx" (length=12)
  45 => string "xxxxxxxxxxxxxx" (length=6)
  46 => string "xxxxxxxxxxxxxx" (length=12)
  47 => string "xxxxxxxxxxxxxx" (length=22)
  48 => string "xxxxxxxxxxxxxx" (length=22)
  49 => string "" (length=0)

内存占用:207.55 kb; 用时:9.5835480690002

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29029.html

相关文章

  • PHP导出超大CSV格式Excel方案

    摘要:场景和痛点说明我们工作场景都常会导出相关的数据,有时候需要大量的数据,,都有可能我们现有方案都是直接利用等类库来操作,的加载或是写入一次导出会遇到超时内存和时间限制问题,就算我们依旧不是最好的方案下面我们利用输出,把数据依次输出清空再输出的 场景和痛点 说明 我们工作场景都常会导出相关的excel数据,有时候需要大量的数据,10W,100W都有可能我们现有方案都是直接利用phpexce...

    yedf 评论0 收藏0
  • PHP实时生成并下载超大数据EXCEL文件

    摘要:而常用的包需要把所有数据拿到后才能生成,在面对生成超大数据量的文件时这显然是会造成内存溢出的,所以考虑使用让边写入输出流边让浏览器下载的形式来完成需求。 最近接到一个需求,通过选择的时间段导出对应的用户访问日志到excel中, 由于用户量较大,经常会有导出50万加数据的情况。而常用的PHPexcel包需要把所有数据拿到后才能生成excel, 在面对生成超大数据量的excel文件时这显然...

    Neilyo 评论0 收藏0
  • php 导出 excel

    关于 PHP 导出 excel csv 常用的有 PHPexcel ,本文整理了一些其他方案。 高性能 Excel 扩展 sudo apt-get install -y zlib1g-dev git clone https://github.com/jmcnamara/libxlsxwriter.git cd libxlsxwriter make && sudo make install // ...

    付永刚 评论0 收藏0
  • 【SpringMvc】后台系统超大报表下载超时处理

    摘要:四层负载均衡不会引起超时。动态修改包的目标地址,并转发数据包使其到达不同的机器上来实现负载均衡的目的,因此节点不会引起超时。七层负载均衡等待上游响应超时。例如使用多线程并发减少远程查询的总体时间如需数据有序,可以使用方案。 B端业务经常要提供下载报表的功能,一般的方法是先查询出所有数据,然后在内存中组装成报表(如XLS/XLSX格式)后统一输出。但是如果生成报表需要查询的数据量很大,远...

    kohoh_ 评论0 收藏0
  • 打造最全面PHPExcel开发解决方案

    摘要:过去工作中使用较多,碰到并解决了各种大大小小的问题,总结出这样一篇文章,一方面记录自己踩过的坑,一方面与大家分享,让大家少走弯路,并不断完善之,欢迎大家去上面和提交,不断补充和优化,打造最全面的开发解决方案地址原文地址基础小试牛刀引用文 过去工作中使用PHPExcel较多,碰到并解决了各种大大小小的问题,总结出这样一篇文章,一方面记录自己踩过的坑,一方面与大家分享,让大家少走弯路,并不...

    ThinkSNS 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<