PHPExcel插件生成exel表:有的excel能打开,有的excel打不开

PHPExcel导出xls无法打开文件问题

在header之前,通过清除缓冲区:ob_end_clean();然后excel打开就正常了;亲测,有效。

 

PHPExcel插件生成exel表:有的excel能打开,有的excel打不开;

如图

 

 

修改代码,在导出的时候添加:ob_end_clean();

public function AntiExportData($list)
    {
//        error_reporting(0);
 
        $objPHPExcel = new \PHPExcel();
 
        //设置文件的一些属性,在xls文件——>属性——>详细信息里可以看到这些值,xml表格里是没有这些值的
        $objPHPExcel
            ->getProperties()  //获得文件属性对象,给下文提供设置资源
            ->setCreator( "MaartenBalliauw")             //设置文件的创建者
            ->setLastModifiedBy( "MaartenBalliauw")       //设置最后修改者
            ->setTitle( "Office2007 XLSX Test Document" )    //设置标题
            ->setSubject( "Office2007 XLSX Test Document" )  //设置主题
            ->setDescription( "Test document for Office2007 XLSX, generated using PHP classes.") //设置备注
            ->setKeywords( "office 2007 openxmlphp")        //设置标记
            ->setCategory( "Test resultfile");                //设置类别
        // 位置aaa *为下文代码位置提供锚
        //给表格添加数据
 
        $objPHPExcel->setActiveSheetIndex(0)//表头的信息
        ->setCellValue('A1', "ID")
            ->setCellValue('B1', "防伪码")
            ->setCellValue('C1', "序列号")
            ->setCellValue('D1', "可获得积分")
            ->setCellValue('E1', "状态")
            ->setCellValue('F1', "会员")
            ->setCellValue('G1', "查询时间")
            ->setCellValue('H1', "导入时间");
        $i=2;
        foreach ($list as $key => $value) {
            if ($value['state'] == 1){
                $state = '已查询';
            }else{
                $state = '未查询';
            }
            if ($value['state'] == 1 && $value['nickname']){
                $nickname = $value['nickname'].'(已兑换)';
            }else{
                $nickname = '未兑换';
            }
            if ($value['export_time'] == null){
                $export_time = '';
            }else{
                $export_time = date("Y-m-d H:i:s", $value['export_time']);
            }
            if ($value['import_time'] == null){
                $import_time = '';
            }else{
                $import_time = date("Y-m-d H:i:s", $value['import_time']);
            }
            $objPHPExcel->getActiveSheet()             //     设置第一个内置表(一个xls文件里可以有多个表)为活动的
            ->setCellValue( 'A'.$i, $value['id'] )       //给表的单元格设置数据
            ->setCellValue( 'B'.$i, $value['anti_counterfeiting_code'] )       //给表的单元格设置数据
            ->setCellValue( 'C'.$i, $value['serial_number'] )
            ->setCellValue( 'D'.$i, $value['integral'])
            ->setCellValue( 'E'.$i, $state )
            ->setCellValue( 'F'.$i, $nickname )
            ->setCellValue( 'G'.$i, $export_time)           //布尔型
            ->setCellValue( 'H'.$i, $import_time);
            $i++;
        }
 
        //公式
 
        //得到当前活动的表,注意下文教程中会经常用到$objActSheet
        $objActSheet =$objPHPExcel->getActiveSheet();
        // 位置bbb *为下文代码位置提供锚
        //给当前活动的表设置名称
        $objActSheet->setTitle('Simple2222');
        //代码还没有结束,可以复制下面的代码来决定我们将要做什么
        ob_end_clean();
        //1,直接生成一个文件
        $objWriter =\PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
        $objWriter->save('myexchel.xlsx');
        header('Content-Type:application/vnd.ms-excel');
        header('Content-Disposition:attachment;filename="防伪数据.xls"');
        header('Cache-Control:max-age=0');
        $objWriter =\PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        return $this->render($this->actionID);
    }

  

 

亲测,有效。

 

posted @ 2022-07-09 10:31  穆晟铭  阅读(364)  评论(0编辑  收藏  举报