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); }
亲测,有效。