我使用PHPExcel读取和解析excel文件。我发现这是一个很好的库,太可惜了,内存占用这么多。(这里希望移到PHP5.3中可以进一步优化)。我的问题是关于来自Worksheet.php的toArray()方法,它用于获取文件数据的数组。我以推荐的方式(使用读取筛选器)循环遍历文件行号,但发现返回的数组“填充”了空值,直到读取筛选器的范围开始为止。
例如,假设read的行范围设置为从3行开始,读取2行,我得到
0, 1, 2
1: null, null, null
2: null, null, null
3: "1", "2", "3"
4: "a", "b", "c"在读取大文件时,这不会影响内存占用吗?有办法阻止这种行为吗?(我似乎找不到任何推荐信)。对结果使用array_slice应该是没有意义的,因为它只会创建一个新的更小的数组,原始数组仍然会创建内存尖峰。
发布于 2014-03-27 11:28:47
toArray()方法/ cell /接受从单元格'A1‘到工作表中最高的列/行的值.不管是否填充了单元格;是的,这将影响内存占用;这就是为什么我们还提供了一个rangeToArray()方法,您可以在其中指定实际的范围。
$myArray = $objPHPExcel->getActiveSheet()->rangeToArray('A3:C4');当您将读筛选器应用于只读取单元格A3到C4时,PHPExcel仍然使用原始文件中单元格A3的值填充单元格A3,它根本不填充在读取筛选器之外的单元格中的数据.这意味着那些超出指定范围的单元格没有加载,因此节省了内存。但是,如果您尝试访问脚本范围以外的单元格( toArray()确实引用单元格A1、B1、C1、A2、B2、C2 ),那么将在内存中创建空单元格,从而导致内存尖峰。
https://stackoverflow.com/questions/22685620
复制相似问题