繁体   English   中英

phpexcel下载

[英]phpexcel to download

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

但这会将它保存到我的服务器

谢谢你

不是将其保存到文件,而是将其保存到php://output Docs

$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 标题,请参见以下问题: Setting mime type for excel document

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

对于 XLSX 使用

来自 XLSX 的 SET IN $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');

使用这个电话

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

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

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

下载的所有文件都以空行开头,在我的例子中是四个空行,这会产生问题。 无论您是否使用readfile(); save('php://output'); , 这可以通过添加ob_start(); 在脚本的开头和ob_end_clean(); 就在readfile()之前; 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM