【问题标题】:PHPExcel File format or extension is not validPHPExcel 文件格式或扩展名无效
【发布时间】:2013-06-03 18:18:01
【问题描述】:

我正在使用 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();
}

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

【问题讨论】:

    标签: phpexcel file-format xlsx


    【解决方案1】:

    如手册中所述....如果 anything else 正在输出到浏览器,这将损坏输出文件。

    在文本编辑器中打开文件,并在输出的开头查找前导或尾随空白字符(空格、制表符、换行符)或 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"');
    

    【讨论】:

    • 感谢您的关注,但我的脚本没有在我的输出文件中输出任何 html 和 css 代码。缓冲区导致了这一点。我在标题之前使用了 ob_end_clean 没有更多的垃圾代码,但是我仍然有同样的问题。正如你所说,我还检查了空白字符,我在很多 nul 字符之间看到了“无标题电子表格”和“无标题创建者”等,我不明白是什么原因造成的 :(
    • 检查您在文本编辑器中使用的“编码”。它可能会回显一些字符。
    • 谢谢我在php端有错误,我不知道
    • 在标题之前的一行中添加ob_clean(); 节省了我的时间。我在生成的文件中有一个\n,但我不知道它为什么在那里。
    • 感谢提供一站式解决方案
    【解决方案2】:

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

    $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 附加到文件名,并在尝试直接打开文件而不是下载文件时给出错误消息。下载文件并打开电子表格时,一切都很好。

    【讨论】:

      猜你喜欢
      • 2015-12-14
      • 2012-12-24
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 2023-01-19
      相关资源
      最近更新 更多