Недопустимый формат или расширение файла PHPExcel


Я использую phpexcel для экспорта моего запроса в файл excel; однако после того, как я создал файл(который является форматом xslx), я не могу открыть свой файл в excel. Это дает " формат файла или расширение не является допустимым. Убедитесь, что файл не поврежден и что расширение файла соответствует формату файла" ошибка. Когда я открываю файл в texteditor (мой-npp), я вижу css-коды моего php-файла и некоторую часть моих 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();
}

Я застрял, пожалуйста, помогите. Благодарю ты.

1 2

1 ответ:

Как описано в руководстве.... если Все что угодно else выводится в браузер, это приведет к повреждению выходного файла.

Откройте файл в текстовом редакторе и найдите начальные или конечные символы пробела (пробелы, табуляции, новые строки) или маркер спецификации в начале вывода, а также любые очевидные сообщения об ошибках открытого текста PHP в содержимом. Таковы наиболее очевидные причины этой проблемы. После того, как вы определили ложные символы, проверьте через ваш скрипт, чтобы увидеть, где генерируется этот вывод, и удалить его.

В вашем случае это означает, что Не надо выводите css и html.

EDIT

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"');