Ошибка: формат файла или расширение файла недопустимы. убедитесь, что файл не был поврежден

#php #phpspreadsheet

#php #phpspreadsheet

Вопрос:

я хочу использовать библиотеку PhpSpreadsheet в моем проекте для экспорта данных в Excel экспортированный файл, но когда я пытаюсь открыть файл, отображается эта ошибка: excel не может открыть файл, потому что формат файла или расширение файла недопустимы. убедитесь, что файл не был поврежден

  • Примечание: я использую MVC в своем проекте, поэтому код в контроллере выглядит следующим образом:

            protected function Excel($view, $variables = [])
    {
      require_once PATH_LIBRARY_FOLDER.'PhpSpreadsheetvendorautoload.php';
      ob_start();
      // Note: make new Spreadsheet object
      $spreadsheet = new Spreadsheet();
      // Note: get current active sheet (frist sheet)
      $sheet = $spreadsheet->getActiveSheet();
      $sheet->setCellValue('A1', 'Hello World !');
    
      extract($variables);
      include($this->viewPath.$view.'.php');
      // Note: set the header to define it is excel file
      header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
      // Note: set the header to define excel file name
      header("Content-Disposition: attachment;filename="filename.xlsx"");
      header("Cache-Control: max-age=0");
    
      // Note: create IOFactory object
      $writer = IOFactory::createWriter($spreadsheet, 'xlsx');
      ob_get_clean();
    
      $writer->save('php:://output');
      exit();
    }
      

когда я открываю файл в виде текста, я обнаружил эту ошибку:

Неустранимая ошибка: не удалось открыть PHPOfficePhpSpreadsheetWriter Exception: Не удалось открыть php:://вывод для записи. в C:xampphtdocsGL_AppLibraryPhpSpreadsheetvendorphpofficephpspreadsheetsrcPhpSpreadsheetWriterXlsx.php:218

Ответ №1:

У меня та же проблема, мое решение здесь. Просто поместите код ниже :

ob_end_clean();

Код:

         ob_end_clean();
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="'. $filename );
        header('Cache-Control: max-age=0');

        $writer->save('php://output'); // download file
  

Ответ №2:

Измените эту строку кода

 $writer->save('php:://output');
  

Для

 $writer->save('php://output');
  

Он должен работать. Кроме того, как вы передаете данные на лист Excel? Возможно, у вас повреждены данные.

Пожалуйста, вставьте это в свой код после autoload.php

     use PhpOfficePhpSpreadsheetSpreadsheet;
    use PhpOfficePhpSpreadsheetWriterXlsx;
  

Комментарии:

1. я изменил его, но все еще не могу открыть файл и та же ошибка @Budimir Skrtic

2. Хорошо, что это делает extract($variables); include($this-> viewPath.$view.’.php’);? Вы получаете какие-либо выходные данные? Взгляните на мой обновленный пост и добавьте эти две строки кода.

3. вышеуказанные 2 строки уже добавлены в верхней части страницы в разделе пространство имен: ядро пространства имен контроллер; используйте Core App; используйте PHPOffice PhpSpreadsheet Электронная таблица; используйте PHPOfficePhpSpreadsheetWriter Xlsx;

4. большое спасибо, я снимаю наличные и после редактирования моего кода в: $ writer-> save(‘php:// output’); теперь это работает @Budimir Skrtic