日期:2014-05-17  浏览次数:20682 次

关于 PHPExcel 的问题
数据库有600多条数据。
我用 PHPExcel 导出来要40多秒。
而我自己写个程序导出.csv的文件,却只要不到5秒···

请教一下大家为什么?
PHPExcel版本1.7.3
代码如下:

static public function exportDataModel($array_value, $result_data)
{
Export::head($array_value['export_head']);
$objPHPExcel = new PHPExcel();
$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
$objPHPExcel->getProperties()->setCreator($array_value['PropertiesCreator']);
$objPHPExcel->getProperties()->setTitle($array_value['PropertiesTitle']);
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setTitle($array_value['ActiveSheetTitle']);

$column_name = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
$arr_ActiveSheetCellValue = $array_value['ActiveSheetCellValue'] ;
 
for($i = 0; $i < count($arr_ActiveSheetCellValue); $i ++)

$objPHPExcel->getActiveSheet()->setCellValue($column_name[$i].'1', $arr_ActiveSheetCellValue[$i]);
}
$row = 2; 
foreach ($result_data as $result_d)

$arr_ActiveSheetCellValueData = $array_value['ActiveSheetCellValueData'] ; 
for($j = 0; $j < count($arr_ActiveSheetCellValueData); $j ++)

$objPHPExcel->getActiveSheet()->setCellValue($column_name[$j].$row, $result_d[$arr_ActiveSheetCellValueData[$j]]);

$row++;

$objWriter->save('php://output');
}

------解决方案--------------------
  PHPExcel是一个很强大的处理Excel的PHP开源类,但是很大的一个问题就是它占用内存太大,官网上是这么说的:PHPExcel平均下来使用1k/单元格的内存,因此大的文档会导致内存消耗的也很快。而你导出的csv文件用的是PHP的内置函数。所以相比下来,会相差很多!
------解决方案--------------------
在循环里老是$objPHPExcel->getActiveSheet()会不会有影响, 能不能先存到变量里