5

我正在使用 phpexcel 将我的查询导出到 excel 文件中;但是在我创建文件(这是 xslx 格式)之后,我无法在 excel 中打开我的文件。它给出“文件格式或扩展名无效。验证文件没有损坏并且文件扩展名与文件的文件格式匹配”错误。当我在 texteditor(我的是 npp)中打开文件时,我看到了我的 php 文件的 css 代码和我的 html 代码的一部分。我的代码是这样的;

if( ! empty($_POST['export'])){
  $query = "SELECT * FROM asd ORDER BY asdf LIMIT 10";
  $headings = array('Timestamp', 'h1','h2');
      require 'Classes/PHPExcel.php';

  $objPHPExcel = new PHPExcel();
  $objPHPExcel->getActiveSheet()->setTitle('List of Users');

  $rowNumber = 1;
  $col = 'A';
  foreach($headings as $heading) {
    $objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$heading);
    $col++;
  }

  $rowNumber = 2;
  while ($row = mysql_fetch_row($result)) {
    $col = 'A';
    foreach($row as $cell) {
        $objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$cell); 
        $col++;
    }
    $rowNumber++;
  }

$objPHPExcel->getActiveSheet()->freezePane('A2');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="userList.xlsx"');
header("Content-Transfer-Encoding: binary ");
//ob_end_clean();
//header('Cache-Control: max-age=0');

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

我被卡住了,请帮忙。谢谢你。

4

2 回答 2

17

如手册中所述....如果有其他任何内容输出到浏览器,这将损坏输出文件。

在文本编辑器中打开文件,并在输出的开头查找前导或尾随空白字符(空格、制表符、换行符)或 BOM 标记,或在内容中查找任何明显的 PHP 纯文本错误消息。这些是导致此问题的最明显原因。识别出虚假字符后,请检查脚本以查看生成输出的位置,然后将其删除。

在您的情况下,这意味着不要输出您的 css 和 html。

编辑

xlsx 是 OfficeOpenXML Excel2007 文件的扩展名,而不是 BIFF 8 xls 文件的扩展名......在您的标题(mime 类型和文件扩展名)和 Writer 中保持一致

任何一个:

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="userList.xls"');

或者

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="userList.xlsx"');
于 2013-06-07T13:04:11.033 回答
0

在我阅读的某个地方的文档或评论之后,我得到了这个:

$objWriter = PHPExcel_IOFactory::createWriter($spreadsheet, 'Excel2007');
header('Content-Type: application/vnd.ms-excel');
// etc

代替

$objWriter = PHPExcel_IOFactory::createWriter($spreadsheet, 'Excel2007');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
// etc

这导致 Firefox 和 IE/Edge 将 .xls 附加到文件名,并在尝试直接打开文件而不是下载文件时给出错误消息。下载文件并打开电子表格时,一切都很好。

于 2019-06-25T22:04:48.557 回答