用phpExcel 导出数据超过1万条浏览器假死。求解决方法,或者其他的导出excel类。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用phpExcel 导出数据超过1万条浏览器假死。求解决方法,或者其他的导出excel类。相关的知识,希望对你有一定的参考价值。
解决大量数据,要么你OOP特别强,写的非常合理,老话:内聚高,耦合低;要么就化整为零。本来php就不太适合处理特别大的数据。本身程序的健壮性就没其他语言强。 参考技术A 非要一次执行完成?!把1w条数据分成5次,每次导出2k条,然后刷新页面,接着将导出的数据追加到excel表格中。追问
嗯。已经分成一次取1000条,但是还是卡在了追加到excel的过程中。
追答用php操作Excel是痛苦的。
以前公司OA导数据就是用Excel,经常报各种各样的错误。
没辙,只好使用java来操作excel。从此各种问题介消失
已经痛苦得青筋都出来了。一直处理几千条没问题,现在数据到了1W以上就无反应了。
追答为什么非要用PHP呢,用Java,Python,Ruby,C#这些网络语言都可以很好的办到。并且稳定性和效率都非常好。
追问网站就是用PHP写的,后台有导出数据成excel的功能而已,没想到数据会如此庞大。
参考技术B set_time_limit(0);或者ini_set('max_execution_time', '900000');追问
谢谢。但是加了还是不行,长时间无反应,然后超时。
追答处理数据时间太长了,我处理6k多条数据时会要很长时间,你这个估计还更长。所以还是分条处理把 我用的excelexport.php
追问嗯。sql语句优化成一次取1000条,看来瓶颈卡在了插入excel表的过程中。之前有一种是先输出为html格式,然后转换成excel格式下载的,不知道你有没用过。现在不会用了。
追答我用的类市直接 输出excel.xls文件的
追问phpExcel 也是直接输出。但是超过5000条就会超时了。记得之前是用 osCommerce,一次处理9W多条都没有问题。可是这个项目是自己写的。
追答处理大数据比较吃力
本回答被提问者采纳 参考技术C wefrphpexcel导出excel的数据超过26列怎么办 Invalid cell coordinate [1(THINKPHP3.2中开发遇到的)
最近有个需求,THINKPHP3.2中对数据进行导出,数据一共有43项,导出时候就会抱错 Invalid cell coordinate [1
因为phpexcel 的cell.php里默认就设置了26列,而且判断方法里默认从a-z然后下一个列就是aa1了 ,而实际上在excel里z后面应该是AA,AB,AC,AD,AE,AF这样 所以需要改判断方法,我之前写过一篇excel的导出,只需要吧其中一个方法改动一下,改动的思想就是 当超过26列的时候 下一列命名应该是AA,AB,而不是 aa1,AA2,改进方法如下
protected function getExcel($fileName,$headArr,$data){
//导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
import("Org.Util.PHPExcel");
import("Org.Util.PHPExcel.Writer.Excel5");
import("Org.Util.PHPExcel.IOFactory.php");
$date = date("Y_m_d",time());
$fileName .= "_{$date}.xls";
//创建PHPExcel对象,注意,不能少了\
$objPHPExcel = new \PHPExcel();
$objProps = $objPHPExcel->getProperties();
//设置表头 超过26列
$key = 0;
foreach($headArr as $v){
//注意,不能少了。将列数字转换为字母\
$colum = \PHPExcel_Cell::stringFromColumnIndex($key);
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.‘1‘, $v);
$key += 1;
}
//设置表头
$column = 2; //从第二行写入数据 第一行是表头
$objActSheet = $objPHPExcel->getActiveSheet();
foreach($data as $key => $rows){ //行写入
$span = 0;
foreach($rows as $keyName=>$value){// 列写入
$j = \PHPExcel_Cell::stringFromColumnIndex($span);
$objActSheet->setCellValue($j.$column, $value);
$span++;
}
$column++;
}
$fileName = iconv("utf-8", "gb2312", $fileName);
//重命名表
//$objPHPExcel->getActiveSheet()->setTitle(‘test‘);
//设置活动单指数到第一个表,所以Excel打开这是第一个表
$objPHPExcel->setActiveSheetIndex(0);
ob_end_clean();//清除缓冲区,避免乱码
header(‘Content-Type: application/vnd.ms-excel‘);
header("Content-Disposition: attachment;filename=\"$fileName\"");
header(‘Cache-Control: max-age=0‘);
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel5‘);
$objWriter->save(‘php://output‘); //文件通过浏览器下载
exit;
}
ok 遇到其问题 或者 出现其他bug可以联系我 群84451248 加群的话 请备注 博客园大白驴 否则无法通过。
以上是关于用phpExcel 导出数据超过1万条浏览器假死。求解决方法,或者其他的导出excel类。的主要内容,如果未能解决你的问题,请参考以下文章