Ошибка: неверный формат или расширение файла. убедитесь, что файл не был поврежден - PullRequest
0 голосов
/ 03 апреля 2019

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

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

           protected function Excel($view, $variables = [])
    {
      require_once PATH_LIBRARY_FOLDER.'PhpSpreadsheet\vendor\autoload.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();
    }
    

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

Неустранимая ошибка : Uncaught PhpOffice \ PhpSpreadsheet \ Writer \ Exception: Не удалось открыть php :: //выход для записи.в C: \ xampp \ htdocs \ GL_App \ Library \ PhpSpreadsheet \ vendor \ phpoffice \ phpspreadsheet \ src \ PhpSpreadsheet \ Writer \ Xlsx.php: 218

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

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

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
0 голосов
/ 03 апреля 2019

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

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

на

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

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

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

    use PhpOffice\PhpSpreadsheet\Spreadsheet;
    use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
...