当前位置: 首页 > 后端技术 > PHP

PHP读取大excel文件数据的解决方法

时间:2023-03-29 18:14:18 PHP

场景与痛点讲解今天有老同学来找我说我公司的物流业务现在用excel来处理。因为按月算数据量很大,一个excel差不多有百万条数据,文件接近100M。打开和搜索非常容易。慢是和场景相关的:导入数据,excel中可能有大量的数据。这里使用phpexcel等一些常用的方法往往会有时间和内存的限制。接下来,我们将使用一个使用流处理的类库SpreadsheetReader来放大excel。阅读编写过程讲解关键,在代码中注释代码Sheets();if(!$sheets){die("noworksheet");}//更改当前处理的工作表$Reader->ChangeSheet(0);//打印当前工作表的当前行数据var_dump($Reader->current());//因为reader类集成了Iter,所以可以迭代处理//这里提醒一下,如果文件太大,这里的处理速度会太慢,但是不会造成内存性能问题//$i=0;//foreach($Readeras$Row)//{//if($i>=3){//中断;//}////回显$i.PHP_EOL;//print_r($Row);////$i++;//}$endTime=microtime(true);$memoryUse=memory_get_usage();echo"内存占用:".转换($内存使用)。";经过的时间:".($endTime-$startTime)。PHP_EOL;结果测试,上面读取的example1.xlsx文件大约100M,读写太慢,测试只打开读取当前默认工作表的当前行数据。由于数据敏感性,屏蔽日志内存使用量为147.77kbarray(size=50)0=>string'xxxxxxxxxxxxxxx'(length=25)1=>string'xxxxxxxxxxxxxx'(length=15)2=>string'xxxxxxxxxxxxxxx'(length=18)3=>字符串'xxxxxxxxxxxxxxx'(长度=12)4=>字符串'xxxxxxxxxxxxxxx'(长度=12)5=>字符串'xxxxxxxxxxxxxx'(长度=12)6=>字符串'xxxxxxxxxxxxxxx'(长度=24))7=>字符串'xxxxxxxxxxxxxxx'(长度=12)8=>字符串'xxxxxxxxxxxxxxx'(长度=27)9=>字符串'xxxxxxxxxxxxxx'(长度=12)10=>string'xxxxxxxxxxxxxx'(length=15)11=>string'xxxxxxxxxxxxxxx'(length=28)12=>string'xxxxxxxxxxxxxx'(length=9)13=>string'xxxxxxxxxxxxxx'(length=12)14=>字符串'xxxxxxxxxxxxxx'(长度=9)15=>字符串'xxxxxxxxxxxxxx'(长度=6)16=>字符串'xxxxxxxxxxxxxx'(长度=9)17=>字符串'xxxxxxxxxxxxxx'(长度=3)18=>string'xxxxxxxxxxxxxx'(length=6)19=>string'xxxxxxxxxxxxxxx'(length=3)20=>string'xxxxxxxxxxxxxx'(length=15)21=>string'xxxxxxxxxxxxxx'(length=15)22=>string'xxxxxxxxxxxxxx'(长度=19)23=>字符串'xxxxxxxxxxxxxx'(长度=13)24=>字符串'xxxxxxxxxxxxxx'(长度=19)25=>字符串'xxxxxxxxxxxxxx'(长度=12)26=>字符串'xxxxxxxxxxxxxx'(length=12)27=>string'xxxxxxxxxxxxxx'(length=12)28=>string'xxxxxxxxxxxxxx'(length=6)29=>string'xxxxxxxxxxxxxx'(length=12)30=>string'xxxxxxxxxxxxxx'(长度=6)31=>字符串'xxxxxxxxxxxxxx'(长度=15)32=>字符串'xxxxxxxxxxxxxxx'(长度=24)33=>字符串'xxxxxxxxxxxxxx'(长度=18)34=>字符串'xxxxxxxxxxxxxx'(长度=18)35=>字符串“xxxxxxxxxxxxxx”(长度=24)36=>字符串“xxxxxxxxxxxxxxx”(长度=12)37=>字符串“xxxxxxxxxxxxxx”(长度=18)38=>字符串“xxxxxxxxxxxxxx”(长度=21)39=>字符串'xxxxxxxxxxxxxx'(长度=9)40=>字符串'xxxxxxxxxxxxxxx'(长度=9)41=>字符串'xxxxxxxxxxxxxx'(长度=18)42=>字符串'xxxxxxxxxxxxxx'(长度=21)43=>字符串'xxxxxxxxxxxxxx'(length=15)44=>string'xxxxxxxxxxxxxx'(length=12)45=>string'xxxxxxxxxxxxxxx'(length=6)46=>string'xxxxxxxxxxxxxx'(length=12)47=>string'xxxxxxxxxxxxxx'(length=22)48=>string'xxxxxxxxxxxxxx'(length=22)49=>string''(length=0)内存占用:207.55kb;使用时间:9.5835480690002