PHPExcel export给了我垃圾

PHPExcel export给了我垃圾,php,phpexcel,Php,Phpexcel,因此,我试图使PHPExcel从db导出som数据,并打开一个保存对话框,供用户保存excel文件 在我的网络预览中,我得到了以下信息: PK%y~GGD²Xð[内容类型].xml-MNÃ0÷“ò%nY 瓦阿 “我方的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们,他们的研究者们的研究者们的研究者们的研究者们,他们的研究者的研究者们的研究者们的研究者们的研

因此,我试图使
PHPExcel
从db导出som数据,并打开一个
保存对话框
,供用户保存excel文件

在我的网络预览中,我得到了以下信息:

PK%y~GGD²Xð[内容类型].xml-MNÃ0÷“ò%nY 瓦阿 “我方的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们,他们的研究者们的研究者们的研究者们的研究者们,他们的研究者的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们,他们的研究者们的研究者们的研究者,他们的研究者们的研究者们的研究者们的研究者,他们的研究者们的研究者,他们的研究者们的研究者们的研究者们的研究者,他们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们的研究者们,他们的研究者们,他们的研究者,他们的研究者,他们的研究者,他们的研究者们的研究人乳头瘤病毒(hPv)感染率(hPv)为1/2,感染率为1/2,感染率为78%

只是很多什么

当然,不会打开
保存对话框。
如果我选择将文件保存在服务器上而不是打开“保存对话框”,则此代码可以正常工作

PHP

/** Error reporting */
error_reporting(E_ALL);

//Load phpexcel includes    
require '../Classes/PHPExcel.php';

/** PHPExcel_Writer_Excel2007 */
include '../Classes/PHPExcel/Writer/Excel2007.php';

// Create new PHPExcel object
$objPHPExcel = new PHPExcel();

// Add some data
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Nr');
$objPHPExcel->getActiveSheet()->SetCellValue('B1', 'Höjd');
$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Typ');
$objPHPExcel->getActiveSheet()->SetCellValue('D1', 'Längd');
$objPHPExcel->getActiveSheet()->SetCellValue('E1', 'AV');
$objPHPExcel->getActiveSheet()->SetCellValue('F1', 'Öppningar');

$objPHPExcel->getActiveSheet()->SetCellValue('G1', 'Vikt');


//Fetch data from DB
$query = "SELECT * FROM table WHERE objekt_nr = '$objNr' ORDER BY length(element_nr), element_nr ASC";
try{
    $stmt = $db->prepare($query);
    $result = $stmt->execute();
}
catch(PDOException $ex){
    die("Failed to run query: " . $ex->getMessage());
}
//Insert on first row after heading 
$row = 2;
while($value = $stmt->fetch()){
    //Set start Column
    $column = "A";

    $objPHPExcel->getActiveSheet()->SetCellValue($column++.$row, $value['element_nr']);
    $objPHPExcel->getActiveSheet()->SetCellValue($column++.$row, $value['hojd']);
    $objPHPExcel->getActiveSheet()->SetCellValue($column++.$row, $value['typ']);
    $objPHPExcel->getActiveSheet()->SetCellValue($column++.$row, $value['langd']);
    $objPHPExcel->getActiveSheet()->SetCellValue($column++.$row, $value['avdrag']."");
    $objPHPExcel->getActiveSheet()->SetCellValue($column++.$row, $value['oppningar']."");

    $objPHPExcel->getActiveSheet()->SetCellValue($column++.$row, $value['vikt']);

    //INCREASE Row Nr
    $row++;
}

// Rename sheet
$objPHPExcel->getActiveSheet()->setTitle($objNr);

header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Disposition: attachment; filename=\"results.xlsx\"");
header("Cache-Control: max-age=0");

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

}
这是有效的:
$objWriter->save('file.xlsx');

这给了我垃圾:
$objWriter->save(
)php://output);


为什么?

您得到的正是您想要的:一个(压缩的)XLSX文档。但是,您的浏览器可能不希望这样-您需要告诉它“嘿,这不是HTML,这是Excel文件!”

在代码中,您必须在任何其他输出之前发送标题:

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
也许还有一个标题写着“你想要”:


您的代码中确实包含这些内容;但是,在代码到达这些行之前,您可能正在向浏览器发送其他内容。请检查您的脚本是否未输出任何数据(即使是空白或BOM-如果您的网络预览具有十六进制视图,例如Fiddler,如果您不调用
->save,您应该在响应正文中看到0个字节()
method),然后再进入
header()
函数。请参见

您得到的正是您想要的:一个(压缩的)XLSX文档。但是,您的浏览器可能不希望这样-您需要告诉它“嘿,这不是HTML,这是Excel文件!”

在代码中,您必须在任何其他输出之前发送标题:

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
也许还有一个标题写着“你想要”:


您的代码中确实包含这些内容;但是,在代码到达这些行之前,您可能正在向浏览器发送其他内容。请检查您的脚本是否未输出任何数据(即使是空白或BOM-如果您的网络预览具有十六进制视图,例如Fiddler,如果您不调用
->save,您应该在响应正文中看到0个字节()
method),然后再进入
header()
函数。请参阅

您发布的示例对于.xlsx文档来说似乎是正确的。您可能应该有一个内容传输编码:binary header。这是“垃圾”“是包含xlsx文档的二进制流,是xml文件的压缩集合……请查看浏览器接收到的标题(看看PHPExcel的
/Examples/01simple download xlsx.php中发送的头文件
当我纠正了两件事时,您的代码对我来说很好:我在方法
setTitle()中设置了变量
$objNr
并删除了最后一个大括号。然后该文件自行下载并可以在Office 2013中打开。您发布的示例看起来与.xlsx文档相符。您可能应该有一个内容传输编码:二进制头。这是“垃圾”是包含xlsx文档的二进制流,是xml文件的压缩集合……请查看浏览器接收到的标题(看看PHPExcel的
/Examples/01simple download xlsx.php中发送的头文件
当我纠正了两件事时,您的代码对我来说很好:我在方法
setTitle()中设置了变量
$objNr
并删除了最后一个大括号。然后该文件自行下载,可以在Office 2013中打开。谢谢。我将尝试移动这些行。我正在从ajax调用PHP文件,所以可能我必须将标题放在另一个文件中?!这不好。现在,在出现
保存对话框之前,我甚至无法进入页面;谢谢你。我将尝试移动这些行。我正在从ajax调用PHP文件,所以可能我必须将标题放在另一个文件中?!这不好。现在,在出现
保存对话框之前,我甚至无法进入页面