使用PHPExcel将大文件导出到Excel

时间:2014-10-24 09:48:03

标签: php laravel-4 phpexcel

我正在尝试使用PHPExcel库在PHP(Laravel4)中导出大约40,000行Mysql数据。 以下是我的代码:

($ patList是结果列数组)

set_time_limit ( 3000 );

$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp;

$cacheSettings = array( 'memoryCacheSize' => -1);

PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

$objPHPExcel = new PHPExcel();
$i = 1;
$patList = $result[0];

for ($r = 0; $r < count($patList); $r++) {

    $objPHPExcel->setActiveSheetIndex(0)

         ->setCellValue("A$i", $patList[$r][0])
         ->setCellValue("B$i", $patList[$r][1])
         ->setCellValue("C$i", $patList[$r][2])
         ->setCellValue("D$i", $patList[$r][1])
         ->setCellValue("E$i", $patList[$r][2])
         ->setCellValue("F$i", $patList[$r][1])
         ->setCellValue("G$i", $patList[$r][2])
         ->setCellValue("H$i", $patList[$r][2])
         ->setCellValue("I$i", $patList[$r][1])
         ->setCellValue("J$i", $patList[$r][2])
         ->setCellValue("K$i", $patList[$r][5]);
     $i++;
}

$objPHPExcel->getActiveSheet()->setTitle('Name of Sheet 1');

header('Content-Type: application/vnd.ms-excel'); 

header('Content-Disposition: attachment;filename="result.xls"');

header('Cache-Control: max-age=0');

ob_clean();

flush();

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

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

如果excel中有3-4列和15,000行,则上面的代码运行正常。但是,如果我增加不。排到30,000或没有。列数为10,excel不会生成。

1 个答案:

答案 0 :(得分:1)

$cacheSettings = array( 'memoryCacheSize' => -1);

不明智....我甚至不知道使用值-1是否有效;但如果确实如此,那就意味着你将所有内容存储在内存中,而不是在php:// temp

memoryCacheSize值告诉缓存流在将数据切换到php:// temp之前应该在内存中存储多少数据;所以

$cacheSettings = array( 'memoryCacheSize' => '8MB');

会告诉缓存流使用8MB内存,然后如果需要存储其他数据以使用php:// temp而不是