PHPxcel toArray函数返回不必要的行

时间:2014-03-27 11:01:51

标签: phpexcel

我正在使用PHPExcel读入和解析excel文件。我发现这是一个很好的库,遗憾的是内存占用很高。 (这里希望转移到PHP 5.3将进一步优化)。我的问题是关于Worksheet.php中的toArray()方法,用于获取文件数据数组。我以推荐的方式遍历文件行号(使用读取过滤器),但发现返回的数组已经填满了#34;具有空值,直到读取过滤器范围开始的点。

例如,假设读取过滤器的行范围设置为从3开始并读取2行,我得

   0,    1,    2
1: null, null, null
2: null, null, null
3: "1",  "2",  "3"
4: "a",  "b",  "c"

在读取大文件时,这不会影响内存占用吗?有没有办法防止这种行为? (我似乎无法找到任何参考资料)。在结果上使用array_slice应该是没有意义的,因为它只会创建一个新的较小的数组,原始数组仍将创建内存峰值。

1 个答案:

答案 0 :(得分:1)

toArray()方法/ always /将单元格'A1'中的值带到工作表中的最高列/行....不管是否填充了单元格;是的,这将影响内存占用;这就是为什么我们还提供rangeToArray()方法,您可以在其中指定实际范围,例如

$myArray = $objPHPExcel->getActiveSheet()->rangeToArray('A3:C4');

当您应用读取过滤器仅读取单元格A3到C4时,PHPExcel仍然使用原始文件中的单元格A3的值填充单元格A3,它只是不会在读取过滤器之外的单元格中填充数据...这意味着没有加载指定范围之外的那些单元格,因此节省了内存。但是,如果您尝试从脚本中访问该范围之外的单元格(并且toArray()确实在您的情况下引用单元格A1,B1,C1,A2,B2,C2),那么将在内存中创建空单元格,从而导致此记忆飙升。