导出Excel:浏览器挂起



我用这个http://phpexcel.codeplex.com/导出到excel。

需要导出11000 - 65000行…但是当尝试这样做时,浏览器会挂起。它不回答错误或其他消息。只要显示正在进行的请求。

top表示apache完成了工作。甚至apache日志都显示已经完成:

x.x.x.x - - [28/Jul/2011:12:28:38 +0300] "POST /doctor/lab/statistic/ HTTP/1.1" 200 2773504 "http://x.x.x.x:82/doctor/lab/statistic/" "Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0"

但仍然没有结果。

系统:

Linux Eearth 2.6.34-12-desktop #1 SMP PREEMPT 2010-06-29 02:39:08 +0200 i686
PHP Version 5.3.5
Apache/2.2.15 (Linux/SUSE) 

所以问题

编辑1

header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename.'.xls"');
header('Cache-Control: max-age=0');
$writer = PHPExcel_IOFactory::createWriter($xls, 'Excel5');
$writer->save('php://output');
exit;

编辑2

我试图将数据保存到这样的文件$writer->save('test.xls'); filesize 2.7MB如果我这样做:

header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename.'.xls"');
header('Cache-Control: max-age=0');
include 'test.xls';
exit;

下载开始立即…

这是可能的,你的web服务器没有发出错误消息,所以我说检查你的error.log(应该挂在/var/log/apache2或类似的)。它很可能是一些琐碎的事情,比如无法写入临时文件。

如果结果是一个死胡同,考虑用编程方式创建带有echo语句的CSV文件——Excel会很好地打开这些文件。

编辑

要生成CSV,执行头文件

header('Content-Type: text/comma-separated-values);
header('Content-Disposition:attachment;filename="'.$filename.'.csv"');
header('Cache-Control: max-age=0');

然后输出列标题:

echo "col1,col2,col3,col4,..." 

后加一行。然后输出您的数据:

while(/*Still got some rows*/) {
   echo $row[0] . "," .$row[1] "," + ...
}

看一下:http://en.wikipedia.org/wiki/Comma-separated_values,这是一个非常简单的文件格式,Excel可以毫不费力地打开它。

另一件我没有想到的事情是,如果你能访问Windows Server,你可以直接通过COM互操作生成Excel文件。

最新更新