12

我正在使用 PHPEXxcel 导出使用 MYSQL 生成的 HTML 表,如下所示。

<?php $query = "SELECT `Firstname`,`Lastname`,`Branch`,`Gender`,`Mobileno`, `Email`  
      FROM `student_details` WHERE Branch IN ('$branch') and `Year`='$year' 
         and Tenthresult > '$tenth' and 
      Twelthresult > '$twelth' and (CGPA > '$cgpa' || CGPA = '$cgpa')";  

$result = mysql_query($query);
confirm_query($result);
$objPHPExcel = new PHPExcel(); 
$objPHPExcel->setActiveSheetIndex(0); 

$rowCount = 1; 
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount,'Firstname');
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount,'Lastname');
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount,'Branch');
$objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount,'Gender');
$objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount,'Mobileno');
$objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount,'Email');

while($row = mysql_fetch_array($result)){ 
    $rowCount++;
    $objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount, $row['0']);
    $objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount, $row['1']);
    $objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount, $row['2']);
    $objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount, $row['3']);
    $objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount, $row['4']);
    $objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount, $row['5']);
} 

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
$objWriter->save('some_excel_file.xlsx'); 
?>

它可以工作,但是它将 xlsx 文件保存在根文件夹中,而不会向用户显示任何已下载的迹象。当我单击按钮时,此代码会运行。现在,我可以像下载邮件附件一样下载它并在前端向用户显示它与位置一起被下载。

我尝试使用

header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="01simple.xls"');
header('Cache-Control: max-age=0'); 

有了这个,我得到了我想要的东西,但是打开时下载的 xls 文件显示消息'您尝试打开的文件'文件名'的格式与指定的扩展名不同......等等。你想要现在打开?

打开它包含整个 HTML 页面或它只是空白...有人可以帮助我..?

4

4 回答 4

18

电子表格 101

有许多不同的电子表格文件格式,每种都有自己不同的文件扩展名,并且可以使用不同的 mime 类型发送到 Web 浏览器。这些在 PHPExcel 文档中进行了描述,并且每个在 PHPExcel 中都有自己不同的 Writer。你不匹配两种不同的格式

BIFF 格式

  • 由 Microsoft Excel 在版本 95 和 2003 文件之间使用

  • 扩展名: xls

  • PHPEXcel 编写器: PHPExcel_Writer_Excel5

  • Mime 类型: application/vnd.ms-excel

OfficeOpenXML 格式

  • 自 2007 版起由 Microsoft Excel 使用

  • 文件扩展名: xlsx

  • PHPEXcel 编写器: PHPExcel_Writer_Excel2007

  • Mime 类型: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

不要混搭:如果你这样做了,那么 Excel 会(并且有理由地)抱怨。如果您想要一个 BIFF 文件,请使用 PHPExcel 的 BIFF Writer (Excel5),文件扩展名为 .xls,以及上面列出的 BIFF 格式的 mime 类型。如果您想要 OfficeOpenXML 文件,请使用 PHPExcel 的 Excel2007 Writer,文件扩展名为 .xlsx,以及上面列出的 OfficeOpenXML 的 mime 类型。

编辑

请注意,PHPExcel 发行版提供的示例包括 01simple-download-xls.php 和 01simple-download-xlsx.php 以准确演示您想要的内容

于 2013-04-09T08:11:29.030 回答
9

仅添加这些标头只会发送这些标头。您的其余代码仍然相同,因此您像以前一样将 xls 保存到根文件夹中。

发送标头只会使您通常看到的页面与 xls 标头一起发送。这不是您想要的,您得到的是 HTML 页面,但标题错误。

您需要做的是发送这些标头,然后流式传输 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=$filename.xls");
header("Content-Transfer-Encoding: binary ");
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
$objWriter->setOffice2003Compatibility(true);
$objWriter->save('php://output');
于 2013-04-09T08:29:19.073 回答
2

我使用下面的代码片段来做到这一点。

// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="test_file.xlsx"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');

// If you're serving to IE over SSL, then the following may be needed
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'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
于 2018-07-11T08:14:31.873 回答
0

尝试这个 ..

header('Content-Type: application/vnd.ms-excel');
    $filename = "Reports".date("d-m-Y-His").".xls";
    header('Content-Disposition: attachment;filename='.$filename .' ');
    header('Cache-Control: max-age=0');
    $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');
于 2017-07-27T09:37:30.067 回答