我正在尝试使用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');
虽然有效,但是当我尝试打开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");
它仍然要求同样的确认。我在这做错了什么,拜托?
答案 0 :(得分:37)
正如质疑用户Tiny对自己的评论所说:
最后,它奏效了。我刚刚在PHP脚本的末尾添加了exit(at 问题中第一个代码片段的结尾)。非常感谢 所有人都给了我有用的提示。
就这类问题提供一些建设性的额外提示:
?>
,这样你就知道你没有在它的末尾发送任何不可见的不可见空格。在header
来电之前,您可以检查是否错误地发送了标题:
if ( headers_sent() ) die("**Error: headers sent");
如果您无法阻止某些函数调用向浏览器发送不需要的字符串,您可以在脚本的最开头使用“擦除”所有函数:
ob_start();
然后,在第一次headers
来电之前,请使用:
ob_clean();
请注意,这样做会阻止您收到错误反馈。
最后,正如已经说过的,如果之后没有必要执行任何操作,请致电exit
或die
。
答案 1 :(得分:4)
也可以通过提供没有Content-Length标头的文件来触发此错误。
答案 2 :(得分:4)
我遇到了这个问题,我的解决方案是将标题内容类型更改为:
header('Content-Type: application/openxmlformats-officedocument.spreadsheetml.sheet');
我之前有过:
header('Content-Type: application/vnd.ms-excel');
我将格式更改为Excel2007,我使用的是Excel5 for excel 2003 xls格式。
我尝试了此页面中的所有解决方案以及所有其他页面都有相同的问题,但没有运气。 所以基本上,我只是改变了我的excels的输出格式,这解决了问题。
答案 3 :(得分:2)
为活动表格提供标题:
$sheet->setTitle('Some title string here');
答案 4 :(得分:0)
我放出口;
之后PHPExcel_IOFactory :: createWriter($ phpExcelObject,'Excel2007')-> save(“ php:// output”);
它对我有用:)
$file_name .= "_".\Carbon\Carbon::now()->format('d_m_Y_H_i').'.xlsx';
// Prepare To Download
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename='.$file_name);
header('Cache-Control: max-age=0');
header('Pragma: public');
PHPExcel_IOFactory::createWriter($phpExcelObject, 'Excel2007')->save("php://output");
exit;
答案 5 :(得分:0)
这可能有助于尝试使用laravel中的def create_model():
model = models.Sequential()
model.add(Conv2D(6, 3, padding='same', data_format='channels_last', kernel_regularizer=l2(5e-4)))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=0.1))
model.add(MaxPool2D())
model.add(Conv2D(8, 3, padding='same', data_format='channels_last', kernel_regularizer=l2(5e-4)))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=0.1))
model.add(MaxPool2D())
model.add(Conv2D(12, 3, padding='same', data_format='channels_last', kernel_regularizer=l2(5e-4)))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=0.1))
model.add(Conv2D(8, 1, padding='same', data_format='channels_last', kernel_regularizer=l2(5e-4)))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=0.1))
model.add(Conv2D(12, 3, padding='same', data_format='channels_last', kernel_regularizer=l2(5e-4)))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=0.1))
model.add(MaxPool2D())
model.add(Flatten())
model.add(Dense(params.grid_height * params.grid_width * params.pred_vec_len * params.num_anchors, activation='relu'))
return model
路径和ajax使用laravel中的https://github.com/Maatwebsite/Laravel-Excel软件包下载excel的人
我得到了类似get
之类的回复,并且内容更多
我尝试了许多解决方案,但失败了
最终我通过在onclick事件中完成此操作
PK ¾@G’D²X ð [Content_Types].xml”MNÃ0…÷œ"ò%nY „švAa •(0ö¤±êØ–gúw{&i‰@ÕnbEö{ßøyìÑdÛ¸l mð¥‘×ÁX¿(ÅÛü)¿’òF¹à¡;@1_滘±Øc)j¢x/%ê…Eˆày¦ ©QÄ¿i!£ÒKµ y3ÜJ<§œZ1½0?YÙL%zV cäÖIb7؇û‰ìa/lÙ¥P1:«qáríÍjªÊj0A¯–Íuë""íàÙ(Œ ”Á€WìMä)Tjå
答案 6 :(得分:0)
我的 php : 7.4.1
os: Ubuntu 18.04
frameword: Yii2.0.37
我也有这个问题,我的解决方案是
我使用 exit
和ob_clean()
$objPHPExcel = new \PHPExcel();
$objPHPExcel->getProperties()->setCreator("Murodjon Abduvohidov")
->setLastModifiedBy("Murodjon Abduvohidov");
$objPHPExcel->getActiveSheet()->getPageSetup()-> setOrientation(\PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE)
->setPaperSize(\PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
$objPHPExcel->getActiveSheet()->getSheetView()->setZoomScale(70);
$objPHPExcel->getActiveSheet()->getSheetView()->setZoomScaleNormal(82);
$objPHPExcel->getActiveSheet()->getSheetView()->setView(\PHPExcel_Worksheet_SheetView::SHEETVIEW_PAGE_BREAK_PREVIEW);
$objPHPExcel->getActiveSheet()->getPageSetup()->setScale(63);
$objPHPExcel->getActiveSheet()->getPageMargins()->setTop(0.4);
$objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0.4);
$objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.4);
$objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(0.4);
$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial');
$objPHPExcel->getDefaultStyle()->getFont()->setSize(10); $objPHPExcel->getActiveSheet()->getCell('A2')->setValue('salom');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');ob_clean();
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="abdulqodir.xlsx"');
header('Cache-Control: max-age=0');
header('Cache-Control: max-age=1');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header('Pragma: public'); // HTTP/1.0
$objWriter->save("php://output");exit;`