任何人都可以告诉我为什么PHPExcel不允许超过5000行。 我在项目中使用开源PHPExcel生成报表,并且我无法从Mysql-DB中编写超过5000行的数据。执行查询时,我的结果集获取7230记录。我如何修复它..为什么PHPExcel不允许写超过5000行
回答
几乎肯定这是一个超时或内存问题。工作表大小的唯一PHPExcel限制是65,536行和256(IV)列(使用Excel5 Writer时);或1,048,576行和16,384(XFD)列(使用Excel2007 Writer时)。
确保始终启用错误日志记录...使用try/catch块来捕获任何PHPExcel异常。并阅读关于内存和性能的PHPExcel网站讨论主题。
没有你的代码或类的代码是相当困难的,我相信......你的意思是你不能在XLS文件或工作表中写入超过5k行?否则,一个丑陋的解决方法可能是在第一张纸上写5K行,其余的在第二张(如果数据库变大,则每张纸5K行)。 我不认为XLS有5k行的限制,所以应该有一些错误或在您的脚本配置错误..你尝试了几次?它总是打印5k行吗?或者它可能是由于超时? (您的脚本或连接)
此类问题很可能是服务器内存问题。你在什么类型的服务器上,你确定它有足够的内存和资源来处理大型数据文件吗?如果你不能说明,最好的解决方法是一次读入几千条记录,处理它们,然后移动到下一个块。我自己宁愿将大数据文件分解成可管理的部分(文件),然后我可以处理每个部分以获得我想要的结果。一旦处理完所有片段,就可以将它们合并在一起,以创建新的大型数据文件。
我有同样的问题。您需要分配足够的时间和内存限制。
我过我这里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 - 容易出错!
ini_set('memory_limit','-1');单独倾向于解决这个问题 – maxhud 2015-08-04 17:35:42
几乎肯定这是一个超时或内存问题。工作表大小的唯一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行。
- 1. 为什么CalendarProvider不允许写入ExtendedProperties?
- 2. %为什么不允许
- 3. 为什么C#允许重写异步?
- 4. 为什么移位超过允许位仍然有效?
- 5. 为什么不允许密码验证?
- 6. 为什么sfinae如果constexpr不允许?
- 7. 为什么样式表列不允许?
- 8. 为什么a,b = 1不允许?
- 9. 为什么PHP不允许比较?
- 10. 为什么xsjs不允许小写的表名?
- 11. 为什么Java不允许在Enum中重写equals(Object)?
- 12. GameObject不允许超过一个孩子
- 13. 为什么不允许在投影中放置过滤器
- 14. 阶梯不允许通过它的路径 - 为什么?
- 15. 为什么Python的queue.Queue.get()允许从超时提前返回?
- 16. 该指数超出允许范围。为什么?
- 17. 为什么GIL不允许执行线程代码?
- 18. 为什么在关系数据库中不允许重复行?
- 19. 为什么Chrome不允许Web Workers在JavaScript中运行?
- 20. SoundPlayer.Play实现中的什么不允许播放超过1个声音异步?
- 21. PHPExcel写XLSX文件,允许内存大小
- 22. 为什么许多SWT控件不允许继承子类?
- 23. 为什么跨站API调用允许一些API但不允许其他人
- 24. 为什么不允许锁定(<integer var>),但允许Monitor.Enter(<integer var>)?
- 25. 为什么运算符[]不允许映射但允许int数组?
- 26. 为什么允许私人入口?
- 27. C - 为什么我允许这样做?
- 28. 为什么Delegate.CreateDelegate允许无效转换?
- 29. 为什么允许空的wchar_t文字?
- 30. 为什么java允许这样做?
你能够检索到5000行吗?如果是这样的话,PHPExcel可能会有一些限制,你最好在CodePlex的支持论坛上提问 - 我总是发现对PHPExcel的支持非常好。如果没有,那可能是服务器的内存/超时问题。 – user183037 2011-02-04 07:21:50