【问题标题】:Error : the file format or file extension is not valid. verify that the file has not been corrupted错误:文件格式或文件扩展名无效。验证文件没有损坏
【发布时间】:2019-04-03 05:59:58
【问题描述】:

我想在我的项目中使用 PHPSpreadsheet 库将数据导出到 excel 导出的文件,但是当我尝试打开文件时显示此错误: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();
    }
    

当我将文件作为文本打开时,我发现了这个错误:

致命错误:未捕获的 PhpOffice\PhpSpreadsheet\Writer\Exception:无法打开 php:://output 进行写入。在 C:\xampp\htdocs\GL_App\Library\PhpSpreadsheet\vendor\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Writer\Xlsx.php:218

【问题讨论】:

    标签: php phpspreadsheet


    【解决方案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 PhpOffice\PhpSpreadsheet\Spreadsheet;
          use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
      

      【讨论】:

      • 我更改了它,但我仍然无法打开文件和同样的错误@Budimir Skrtic
      • 好的,这是做什么的 extract($variables);包括($this->viewPath.$view.'.php');?你有任何数据输出吗?看看我更新的帖子并添加这两行代码。
      • 上面的 2 行已经添加到页面顶部,在 namespace : namespace Core\Controller;使用核心\应用程序;使用 PhpOffice\PhpSpreadsheet\电子表格;使用 PhpOffice\PhpSpreadsheet\Writer\Xlsx;
      • 非常感谢,感谢我把现金和我的代码编辑为: $writer->save('php://output');它现在正在工作@Budimir Skrtic
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 2012-12-24
      • 2013-12-24
      相关资源
      最近更新 更多