下载

你好,我是新到 phpexcel, 我想知道是否有某种方式发送我已经创建的 Excel 到客户端下载而不保存在我的服务器或删除后,他下载它

我试图创建一个页面上的“导出按钮”,将给用户一个“弹出式”与他想要的 Excel,我刚刚创建。

现在,在我创建表之后,我做:

$objXLS->getActiveSheet()->getColumnDimension("A")->setAutoSize(true);
$objXLS->getActiveSheet()->getColumnDimension("B")->setAutoSize(true);


$objXLS->getActiveSheet()->setTitle('Test Stats');


$objXLS->setActiveSheetIndex(0);


$objWriter = PHPExcel_IOFactory::createWriter($objXLS, 'Excel5');
$objWriter->save(__DIR__."/test1.xls");

不过这样就能存到我的服务器上了

谢谢你

223945 次浏览

不要将它保存到文件中,而是保存到 php://output < sup > & shy; Docs :

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

这将把它 AS-IS 发送到浏览器。

首先你需要添加一些 标题 < sup > & shy; Docs ,就像文件下载一样,这样浏览器就能知道文件的类型和命名方式(文件名) :

// We'll be outputting an excel file
header('Content-type: application/vnd.ms-excel');


// It will be called file.xls
header('Content-Disposition: attachment; filename="file.xls"');


// Write file to the browser
$objWriter->save('php://output');

首先做标题,然后保存。对于 Excel 的标题看到以下问题: 为 Excel 文档设置 mime 类型

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


// Do your stuff here


$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5');


// This line will force the file to download
$writer->save('php://output');

打这个电话

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

要将 XLS 工作表输出到所在的页面,只需确保所在的页面没有其他的 echo、 print 和输出。

也许你已经解决了你的问题,不管怎样,我希望这能帮到你。

所有下载的文件都以空行开始,在我的例子中是四个空行 无论你使用 readfile();还是 这可以通过在 脚本的开头和 ob_end_clean();正好在 readfile()之前; 或 save('php://output');.

用于 XLSX

从 XLSX 设置为带扩展名的 $xlsName名称

$objPHPExcel = new PHPExcel();


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

用于 XLS

设置为 $xlsName名称,从 XLS 扩展名

$objPHPExcel = new PHPExcel();


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


header('Content-Disposition: attachment; filename="file.xlsx"');


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


header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT');


header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');


header ('Cache-Control: cache, must-revalidate');


header ('Pragma: public');


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


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

我尝试了大多数答案提出的 $writer->save('php://output');命令。

但是这个碰巧下载了一个损坏的文件。

为了解决这个问题,我不得不这样做:

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="filename.xlsx"');
header('Cache-Control: max-age=0');
$path = 'path/to/temp/file.xlsx';
// save content to temporary file
$objWriter->save($path);
// This header was key to me, in order to get it working
header("Content-Length: ".filesize($path));
// output file content
readfile($path);
// delete temporary file
unlink($path);