2011-02-04 138 views
8

任何人都可以告诉我为什么PHPExcel不允许超过5000行。 我在项目中使用开源PHPExcel生成报表,并且我无法从Mysql-DB中编写超过5000行的数据。执行查询时,我的结果集获取7230记录。我如何修复它..为什么PHPExcel不允许写超过5000行

+0

你能够检索到5000行吗?如果是这样的话,PHPExcel可能会有一些限制,你最好在CodePlex的支持论坛上提问 - 我总是发现对PHPExcel的支持非常好。如果没有,那可能是服务器的内存/超时问题。 – user183037 2011-02-04 07:21:50

回答

15

几乎肯定这是一个超时或内存问题。工作表大小的唯一PHPExcel限制是65,536行和256(IV)列(使用Excel5 Writer时);或1,048,576行和16,384(XFD)列(使用Excel2007 Writer时)。

确保始终启用错误日志记录...使用try/catch块来捕获任何PHPExcel异常。并阅读关于内存和性能的PHPExcel网站讨论主题。

1

没有你的代码或类的代码是相当困难的,我相信......你的意思是你不能在XLS文件或工作表中写入超过5k行?否则,一个丑陋的解决方法可能是在第一张纸上写5K行,其余的在第二张(如果数据库变大,则每张纸5K行)。 我不认为XLS有5k行的限制,所以应该有一些错误或在您的脚本配置错误..你尝试了几次?它总是打印5k行吗?或者它可能是由于超时? (您的脚本或连接)

0

此类问题很可能是服务器内存问题。你在什么类型的服务器上,你确定它有足够的内存和资源来处理大型数据文件吗?如果你不能说明,最好的解决方法是一次读入几千条记录,处理它们,然后移动到下一个块。我自己宁愿将大数据文件分解成可管理的部分(文件),然后我可以处理每个部分以获得我想要的结果。一旦处理完所有片段,就可以将它们合并在一起,以创建新的大型数据文件。

9

我有同样的问题。您需要分配足够的时间和内存限制。

我过我这里3个不同的服务器上的解决方案是结果:

关于5000条记录(12列)

读文件:
9点48分22秒峰值内存使用量:1.25 MB

读取数据:
9时48分31秒峰值内存使用情况:54.5 MB

索引数据到一个数组后:
9点48分35秒峰值内存使用量:68.5 MB

记录:4504

我增加了内存和时间索引它上升到370后读22.000记录。00MB

这里是解决方案(报错,说一切是在代码序列正确) ,你叫PHPExcel在你的程序/功能:

ini_set("max_execution_time", 'time_limit'); //see manual 

是否所有的初始化使这里所有的对象都准备好然后读取文件和索引数据到程序内部结构分配内存:

ini_set('memory_limit', '???'); //your memory limit as string 
$excel = $excelReader->load($filePath); 
"Memory usage: " . (memory_get_peak_usage(true)/1024/1024) . " MB" 
//do the rest of the structure! 

一个好主意是由数据的某些类别已管理这一切,这样你就不会遇到400 MB - 容易出错!

+0

ini_set('memory_limit','-1');单独倾向于解决这个问题 – maxhud 2015-08-04 17:35:42

2

几乎肯定这是一个超时或内存问题。工作表大小的唯一PHPExcel限制是65,536行和256(IV)列(使用Excel5 Writer时);或1,048,576行和16,384(XFD)列(使用Excel2007 Writer时)。

您可以更改此行

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 

然后允许写入记录超过65536行。

相关问题