场景和痛点

说明

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

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

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

编写过程

说明

关键具体在代码里注释

代码

<?php
/*** Created by PhpStorm.* User: qkl* Date: 2018/7/11* Time: 15:14*/set_time_limit(0);   // 设置脚本最大执行时间 为0 永不过期
//ini_set('memory_limit','200M');    // 临时设置最大内存占用function convert($size)
{$unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');return @round($size / pow(1024, ($i = floor(log($size, 1024)))), 2) . ' ' . $unit[$i];
}require '../vendor/autoload.php';$start = memory_get_usage();
echo convert($start) . PHP_EOL;
//$inputFileName = './11111111.xlsx';
$inputFileName = './example1.xlsx';// If you need to parse XLS files, include php-excel-reader$startTime = microtime(true);$Reader = new SpreadsheetReader($inputFileName);//获取当前文件所有的工作表
$sheets = $Reader->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

PHP读取超大的excel文件数据的方案相关推荐

  1. pandas库读取多个excel文件数据并进行筛选合并处理后导入到新表格中

    一.说明: 通过pandas库解决生活中的实际问题,关键词:pandas:Series/DataFrame 实际场景: ①前几日家中的服装店部分库存需要补货,店长向厂家下了部分订单: ②几日后到了一批 ...

  2. 利用pandas读取Excel文件数据

    说明 pandas能帮助我们在Python 代码中直接读取Excel 文件数据. 但只有pandas是不行的,会报错: ImportError: Missing optional dependency ...

  3. 读取EXCEL文件数据,再调用第三方接口,将第三方数据重新写入到EXCEL文件

    读取EXCEL文件数据,再调用第三方接口,将第三方数据重新写入到EXCEL文件 工作中涉及很多提供文档数据,少则几条,多则上万,少的可以自己编辑一个,静态final来自己定义,一旦数太多得话,就得使用 ...

  4. php读取excel文件的数据,如何使用php获取excel文件数据

    如何使用php获取excel文件数据 文章主要介绍了php获取excel文件数据的方法.具有很好的参考价值.下面跟着小编一起来看下吧. 1.下载PHPExcel类,是一个文件夹,还得有一个文件PHPE ...

  5. php读取excel文件数据

    PHP读取excel文件数据一般用phpexcel插件,但这个插件目前已经不再维护,改用phpspreadsheet,可以从github上clone. 该插件读取excel数据还是很方便的,代码如下: ...

  6. VC6.0读取Excel文件数据

    VC6.0读取Excel文件数据 文件存储在Excel文件中,因此第一步是能够在程序中方便地读取表格数据,这里用的是VC6.0 MFC.文章内容仅供参考,程序不完整. 完整的VC6.0相关程序,需要的 ...

  7. 读取excel文件数据,插入sqlite,在dataGridView读取显示

    读取excel文件数据,插入sqlite,在dataGridView读取显示 布局 将读取的文件excel 以及sqlite小型数据库位置(在项目文件下/bin/debug/-DB) 直接上代码 测试

  8. excel导入matlab NaN,Matlab GUI 读取excel文件数据时,出现NaN的问题

    Matlab GUI 读取excel文件数据时,经常会用到如下一段代码,本人有两处不甚明白,请前辈解惑. 源代码 [num,text,raw]=xlsread('123.xls'); for i=1: ...

  9. java中mypoiexception_Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案...

    注意:此参考解决方案只是针对xlsx格式的excel文件! 背景 前一段时间遇到一种情况,服务器经常宕机,而且没有规律性,查看GC日志发生了out of memory,是堆溢出导致的,分析了一下堆的d ...

最新文章

  1. FRVT赛程全纪录:格灵深瞳全球排名前五
  2. 一个UI布局框架,以最少的代码实现UI设置及布局控制
  3. No transaction aspect-managed TransactionStatus in scope
  4. Linux 系统版本查询
  5. 截取数组中的第i个元素,并返回截取后的结果
  6. LINUX下载编译OpenSSL
  7. win10系统右键没有新建文本文件选项
  8. ITIL4实用指南 | ITSM的未来属于敏捷
  9. 十大Ajax框架(排名不分先后)
  10. 维纳滤波和卡尔曼滤波
  11. Cortex M4 SVC 中断
  12. 当 TiDB 遇到图数据库 | TiDB Hackathon 2020 优秀项目分享
  13. STM32HAL库微秒延时函数的实现---DWT和SysTick
  14. 任务管理器服务中没有mysql_已安装的Mysql在任务管理器中找不到的解决方法
  15. FRPS实现内网SSH服务器登陆
  16. laravel-excel导出并写入图片
  17. Desolate Era Book 1, Chapter 1
  18. 美标 三段式、四段式 耳机头 以旧换新
  19. 胡喜:从 BASIC 到 basic ,蚂蚁金服技术要解决两个基本的计算问题
  20. 威力曲面sw2020_威力曲面插件(SolidWorks曲面设计助手)V6.1 正式版

热门文章

  1. MongoDB 副本集的相关概念【转】
  2. Windows 8 系列(六):BackgroundTask 及其引起无法捕获的Crash
  3. Linux下TCP/IP优化
  4. 中国人工智能学会通讯——AI时代的若干伦理问题及策略 1.3 构建算法治理的内外部约束机制...
  5. Topology and Geometry in OpenCascade-Face
  6. Java核心技术- Java内存分配原理
  7. Leetcode-MySQL-180. 连续出现的数字
  8. ORM中的事务和锁、Ajax异步请求和局部刷新、Ajax文件上传、日期时间类型的Json、多表查询图书系统
  9. apache httpclient 工具类_使用HttpClient进行服务的远程调用
  10. 08 事务到底是隔离的还是不隔离的?(转)