我正在使用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应该是没有意义的,因为它只会创建一个新的较小的数组,原始数组仍将创建内存峰值。
答案 0 :(得分:1)
toArray()
方法/ always /将单元格'A1'中的值带到工作表中的最高列/行....不管是否填充了单元格;是的,这将影响内存占用;这就是为什么我们还提供rangeToArray()
方法,您可以在其中指定实际范围,例如
$myArray = $objPHPExcel->getActiveSheet()->rangeToArray('A3:C4');
当您应用读取过滤器仅读取单元格A3到C4时,PHPExcel仍然使用原始文件中的单元格A3的值填充单元格A3,它只是不会在读取过滤器之外的单元格中填充数据...这意味着没有加载指定范围之外的那些单元格,因此节省了内存。但是,如果您尝试从脚本中访问该范围之外的单元格(并且toArray()确实在您的情况下引用单元格A1,B1,C1,A2,B2,C2),那么将在内存中创建空单元格,从而导致此记忆飙升。