1

关于 PHPEXCEL 内存问题的记录很多,所以我的问题假定已应用“块”中的读取 - 正如 Mark Ba​​ker 所描述的那样。我的具体情况是这样的:
- 读取上传到数据库记录的“原始”电子表格(工作正常)
- 检索所述电子表格,使用 PHPExcel 打开,并审核单元格
- 读取行和列并查找条件。
- 如果单元格有 [信息|警告|错误] (a) 应用条件格式并插入单元格注释(工作正常)
- 对所有行和列执行此操作。在完成之前耗尽内存。
- 将格式化的电子表格保存到服务器目录中,以便用户可以下载并查看所有嵌入的错误警告或信息项 - 如果我限制读取的行数,也可以正常工作。

电子表格不是特别大的 130 行和 60 列。

这就是我尝试过的:
- 阅读“块” ala Mark Ba​​ker。问题是过滤器只返回行的子集。与块规则相关的那些。因此,当我在块读取和处理结束时进行保存时,只保存那些行,而不是整个电子表格。
- 使用单元缓存(

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);

) 允许我读取和更新每一行和相关的单元格,但是当我去做时,$objWriter->save(str_replace('.php', '.xlsx', $theDIRandFileName)我在 XMLWriter.php 中遇到了内存问题:

Fatal error: Allowed memory size of 18874368 bytes exhausted (tried to allocate 238592 bytes) in ... /PHPExcel/Shared/XMLWriter.php on line 100

啊!

任何帮助将不胜感激。现在看来,我唯一要尝试的是打开两个副本,使用块方法,但要弄清楚如何读取未经编辑的版本但更新块版本。一定有更好的方法。

4

0 回答 0