我在excel文件中使用phpexcel导出我的查询;但是在我创建文件(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();
}
我被困了请求帮助。谢谢。
答案 0 :(得分:12)
如手册中所述....如果 任何 正在输出到浏览器,则会损坏输出文件。
在文本编辑器中打开文件,并在输出开头查找前导或尾随空白字符(空格,制表符,换行符)或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"');
答案 1 :(得分: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,并在尝试直接打开文件而不是下载文件时给出错误消息。但是,当下载文件并打开电子表格时,一切都很好。