【问题标题】:PHPExcel Invalid File CreatedPHPExcel 创建了无效文件
【发布时间】:2013-02-25 15:48:14
【问题描述】:

我有一个输出 Excel 文件的小 PHPExcel 脚本,问题是,当我从服务器打开它时,我可以毫无问题地打开它。但是当我通过浏览器中的标题下载它时,它不起作用。

我在互联网上搜索了问题,但没有找到任何对我有帮助的东西,我尝试使用 ob_clean();,我检查了 BOM 是否是问题,没有任何效果。

所以我希望你们中的一些人有一个想法可以让我的脚本工作。

$this->objPHPExcel = $this->objReader->load($this->newFilePath);
    $objWorksheet = $this->objPHPExcel->getActiveSheet();
    $objWriter = PHPExcel_IOFactory::createWriter($this->objPHPExcel, 'Excel2007');
    //Adding IO General Overhead
    foreach($this->sums as $sumkey => $sumval){
        foreach($sumval as $keys => $vals){
            foreach($vals as $key => $val){
                $objWorksheet->setCellValueByColumnAndRow($key, $offset[$sumkey][$keys], $val);
            }
        }
        $objWriter->save($this->newFilePath);
    }

    ob_clean();

    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');


    // It will be called file.xls
    header('Content-Disposition: attachment; filename="'.$this->newFilePath.'"');

    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

【问题讨论】:

  • 一如既往....在文本编辑器中打开文件并检查任何前导/尾随空格(包括 BOM 标记),或数据流中任何明显的纯文本错误消息...。我必须经常重复这个,我真的应该为它设置一个宏
  • 但是查看您的代码,您将文件发送到浏览器的哪个位置?您需要保存到 php://output after 发送标头;或发送标头后的 readfile($this->newFilePath)

标签: php phpexcel file-format


【解决方案1】:

查看 /Tests 或 /Examples 中的 01simple-download-xlsx.php 以获取符合您要求的代码示例:

$this->objPHPExcel = $this->objReader->load($this->newFilePath);
    $objWorksheet = $this->objPHPExcel->getActiveSheet();
    $objWriter = PHPExcel_IOFactory::createWriter($this->objPHPExcel, 'Excel2007');
    //Adding IO General Overhead
    foreach($this->sums as $sumkey => $sumval){
        foreach($sumval as $keys => $vals){
            foreach($vals as $key => $val){
                $objWorksheet->setCellValueByColumnAndRow($key, $offset[$sumkey][$keys], $val);
            }
        }
    }


    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');


    // It will be called file.xls
    header('Content-Disposition: attachment; filename="'.$this->newFilePath.'"');

    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2018-02-18
    相关资源
    最近更新 更多