Tin*_*iny 18 php excel-2007 phpexcel
我正在尝试使用PHPExcel以下方法下载Excel文件(xlsx).
require_once("../../phpExcel/Classes/PHPExcel.php");
require_once("../../phpExcel/Classes/PHPExcel/IOFactory.php");
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()->setCreator("Tiny")
->setLastModifiedBy("Tiny")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
$objPHPExcel->setActiveSheetIndex(0);
$sheet=$objPHPExcel->getActiveSheet();
$sheet->setCellValue('A1', 'Hello');
$sheet->setCellValue('B2', 'world!');
$sheet->setCellValue('C1', 'Hello');
$sheet->setCellValue('D2', 'world!');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="test.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
Run Code Online (Sandbox Code Playgroud)
它可以工作但是当我尝试打开Excel文件时,它会在一致的对话框中要求确认.
Excel在'test.xlsx'中找到了不可读的内容.你想恢复这个工作簿的内容吗?如果您信任此工作簿的来源,请单击"是".
我还尝试按如下方式更改标题
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");;
header("Content-Disposition: attachment;filename=test.xlsx");
header("Content-Transfer-Encoding: binary");
Run Code Online (Sandbox Code Playgroud)
它仍然要求同样的确认.我在这做错了什么,拜托?
vic*_*era 38
正如质疑用户Tiny对自己的评论所说:
最后,它奏效了.我刚刚在PHP脚本的末尾添加了exit(在问题的第一个代码片段的末尾).非常感谢大家给我的有用提示.
为这类问题提供一些建设性的额外提示:
?>所有PHP脚本文件的结束标记,这样你就知道你没有在它的末尾发送任何aditional不可见的空格.在header通话之前,您可以检查标头是否已错误地发送:
if ( headers_sent() ) die("**Error: headers sent");
如果您无法阻止某些函数调用向浏览器发送不需要的字符串,则可以在脚本的最开头使用"擦除"所有函数:
ob_start();
然后,在第一次headers通话之前,使用:
ob_clean();
请注意,这样做会阻止您收到错误反馈.
最后,正如已经说过的,如果之后没有必要执行脚本上的某些点,请致电exit或die.
小智 5
好吧,我遇到了这个问题,我的解决方案是将标题 Content-type 更改为:
header('Content-Type: application/openxmlformats-officedocument.spreadsheetml.sheet');
Run Code Online (Sandbox Code Playgroud)
我之前有:
header('Content-Type: application/vnd.ms-excel');
Run Code Online (Sandbox Code Playgroud)
我将格式更改为 Excel2007,我使用 Excel5 作为 excel 2003 xls 格式。
我尝试了此页面和所有其他页面上的所有解决方案,但都遇到了同样的问题,但运气不佳。所以基本上,我只是改变了我的 excel 的输出格式并解决了问题。
| 归档时间: |
|
| 查看次数: |
17886 次 |
| 最近记录: |