我知道,这里有很多问题需要改进PHPExcel
表现。但所有这些都是关于写数据,我的问题是阅读。
我的功能:
function parse($filename){
$objPHPExcel = PHPExcel_IOFactory::load($filename);
$activeSheet = $objPHPExcel->getActiveSheet();
$parsedData = array();
$columnHeaders = array('order', 'ts', 'summ', 'name', 'quant', 'price', 'bccu');
foreach ($activeSheet->getRowIterator() as $rkey => $row) {
$cellIterator = $row->getCellIterator();
foreach ($cellIterator as $ckey => $cell) {
$parsedData[$columnHeaders[$ckey]] = $cell->getCalculatedValue();
}
}
return $parsedData;
}
该文件包含~300行和7列。这个脚本无法在30秒内运行。
我该如何改进?
修改
使用
$objReader = PHPExcel_IOFactory::createReader("Excel2007");
$objPHPExcel = $objReader->load($filename);
没有成功
答案 0 :(得分:4)
如果已经定义了列,那么删除列迭代器呢?
尝试这样的事情:
foreach ($activeSheet->getRowIterator() as $rkey => $row) {
$rowIndex = $row->getRowIndex ();
$parsedData[$rowIndex]['order'] = $activeSheet->getCell('A' . $rowIndex);
$parsedData[$rowIndex]['ts'] = $activeSheet->getCell('B' . $rowIndex);
$parsedData[$rowIndex]['summ'] = $activeSheet->getCell('C' . $rowIndex);
.
.
.
}
答案 1 :(得分:2)
尝试通过发出gc_disable()
来运行parse()之前禁用垃圾收集器。猜测这里的迭代级别没有被PHP正确优化。
答案 2 :(得分:1)
如果您不打算更改文件的内容;将阅读器设置为只读可以提供大约10倍的提升。
例如:
$objReader = PHPExcel_IOFactory::createReader( 'Excel5' );
$objReader->setReadDataOnly( true );