PHPExcel导出“损坏的”.xlsx文件

时间:2015-08-19 17:26:41

标签: laravel-4 phpexcel

我在Laravel中有一个功能,允许用户从他们的应用程序中导出报告。到目前为止,导出.csv工作正常,但是当他们提供导出到.xlsx的选项时,它会抛出一个关于扩展无效的错误。

以下是要导出的函数。

public function export($fileName, $data, $fileType) {
    $xls = new PHPExcel();

    $xls->setActiveSheetIndex(0);

    if (count($data) > 0) {
        $acols = array_keys($data[0]->toArray());
        $xls->getActiveSheet()->fromArray($acols, NULL, 'A1');
        $xls->getActiveSheet()->fromArray($data->toArray(), NULL, 'A2');


        switch ($fileType) {
            case 'csv':
                $objWriter = new PHPExcel_Writer_CSV($xls);
                break;
            case 'xlsx':
                $objWriter = new PHPExcel_Writer_Excel2007($xls);   
                $objWriter->setOffice2003Compatibility(true);
                break;
            case 'html':
                $objWriter = new PHPExcel_Writer_HTML($xls);
                return $objWriter->generateSheetData();
        }

        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Content-Type: application/force-download");
        header("Content-Type: application/octet-stream");
        header("Content-Type: application/download");
        header("Content-Disposition: attachment;filename=$fileName");
        header("Content-Transfer-Encoding: binary ");

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

    return Redirect::back();
}

1 个答案:

答案 0 :(得分:0)

此篡改是由于代码文件中的空格/空格导致传入Excel的数据损坏。你必须按文件调试每个角落文件,以确定是否有任何不需要的空间。它可以在文件的开头,即

之前

如果使用linux,此命令可能有助于查找正确的文件

find . "*" | xargs grep -il \ \<\?php >> php.txt