phpexcel下载


79

您好,我是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");

但这将其保存到我的服务器

谢谢

Answers:


169

与其将其保存到文件中,不如将其保存到php://output文档中

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

这会将它按原样发送到浏览器。

你想添加一些文件第一,喜欢它的常见的有文件下载,因此浏览器知道哪些类型的文件,它应该如何命名(文件名):

// 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类型


1
即时通讯正在下载文件,但不是我创建的文件,当我执行$ objWriter-> save('php:// output')时,它弄乱了我的孔页= \
Dvir Levy

1
请注意,在该页面上输出的唯一内容是两header行和->save()操作的输出。您需要在a)显示页面b)提供下载之间做出选择。两者都不容易使用一个脚本。但是,您可以为下载创建一个脚本,为页面创建一个脚本,并且在执行页面脚本后,重定向到下载脚本,这将使浏览器提供“另存为”对话框。
hakre 2011年

我的问题是我正在使用joomla,但我找不到从空白页加载它的方法。每次我尝试时,我都会获得带有菜单等的Hole Joomla页面。你知道我在哪里可以找到这个问题的答案吗?我不想垃圾邮件堆栈溢出...
Dvir Levy

Dvir-在您的网址中使用&format = raw。在您的mvc中,创建一个view.raw.php文件。
MSD 2013年

1
使用时如何设置Content-Length标题php://output
tonix

22
$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');

您好,谢谢您的回答。我把这行$ writer-> save('php:// output'); 并且它不下载文件,而是在页面上打印出垃圾。你知道为什么会这样吗?
Dvir Levy

您是否也设置了标题?
matino

我正在尝试使用PHPPowerpoint构建PPT,完全按照上述步骤操作,但是将MIMEType更改为application/vnd.openxmlformats-officedocument.presentationml.presentation,这是在我的系统上下载文件,但要这样说File can't be opened。当代码将其写入服务器时,文件正在工作。
无效

为我工作完美。谢谢
果酱

6

供XLSX使用

在XLSX中以扩展名设置$ xlsName名称。示例:$ xlsName ='teste.xlsx';

$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使用

SET IN $ xlsName来自XLS的扩展名。示例:$ xlsName ='teste.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');

3
PSI .: XLS格式是默认定义'Excel5',而XLSX是'Excel2007'。
Rogerio de Moraes 2014年

我正在尝试使用PHPPowerpoint构建PPT,完全按照上述步骤操作,但是将MIMEType更改为application/vnd.openxmlformats-officedocument.presentationml.presentation,这是在我的系统上下载文件,但要这样说File can't be opened。当代码将其写入服务器时,文件正在工作。
无效

xlsx的内容类型应为:“ application / vnd.openxmlformats-officedocument.spreadsheetml.sheet”。参见filext.com/faq/office_mime_types.php
kojow7

5

使用此通话

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

要将XLS工作表输出到您所在的页面,只需确保您所在的页面没有其他回显,打印,输出即可。


在共享主机中工作时,使用$ objWriter-> save('php:// output')时出现错误(可能与文件和文件夹权限有关);消息为“无法打开php://输出进行写入”的未捕获异常'PHPExcel_Writer_Exception'。在third_party / PHPExcel / Writer / Excel2007.php:241中堆栈跟踪:#0
Enrique

我正在尝试使用PHPPowerpoint构建PPT,完全按照上述步骤操作,但是将MIMEType更改为application/vnd.openxmlformats-officedocument.presentationml.presentation,这是在我的系统上下载文件,但要这样说File can't be opened。当代码将其写入服务器时,文件正在工作。
无效

3
 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');

我正在尝试使用PHPPowerpoint构建PPT,完全按照上述步骤操作,但是将MIMEType更改为application/vnd.openxmlformats-officedocument.presentationml.presentation,这是在我的系统上下载文件,但要这样说File can't be opened。当代码将其写入服务器时,文件正在工作。
无效

3

可能您已经解决了您的问题,无论如何我希望这对您有所帮助。

所有下载的文件都以空行开头,在我的情况下是四个空行,这会造成问题。无论您是否使用readfile();save('php://output');,都可以通过ob_start();在脚本开头和ob_end_clean();之前添加来解决此问题readfile()。或 save('php://output');


您遇到的问题是错误日志记录和报告:您看不到警告提示您问题所在:标头已发送。在此参考问题中对此进行了概述:stackoverflow.com/q/8028957/367456
hakre 2014年

2
ob_end_clean()不是od_end_clean()
turson
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.