在下载excel模板的时候,会遇到需要根据查询的数据动态添加excel列名的情况,用模板表的最后的列往后做循环可以做到,但是这个方法也有很大的局限性,如果列有ABC三列,可以在后面动态添加DEF等列,不能在ABC的中间动态添加列,只能在最后添加。
public function download(){
$res=$this->request->param(); //TP5获取前端传输内容
$zimu="";
$maga="";
for($z="C";$z<="Z";$z++){
$zimu[]=$z;
}
$aoo=array_slice($zimu,0,21);
$maga=array(array("name"=>"你好"),array("name"=>"李焕英"));
//读取Excel模板
vendor("PHPExcel.Classes.PHPExcel");
vendor("PHPExcel.Classes.PHPExcel.IOFactory");
ini_set("memory_limit", "13312M");
set_time_limit(0);
$dir='public/uploads/'; //模板存放目录
$templateName='fapiao.xls'; //模板表
$path=dirname(__FILE__); //找到当前脚本所在路径
$PHPExcel=new \PHPExcel();
$PHPReader=new \PHPExcel_Reader_Excel5();
$PHPExcel=$PHPReader->load($dir.$templateName);
$currentSheet=$PHPExcel->getSheet(0);
//根据$maga的内容给模板添加动态列名
if(empty($maga)){
$currentSheet->setCellValue('C2',"是吗");
}else{
for($i=0;$i<count($maga);$i++){
$currentSheet->setCellValue($aoo[$i].'2',$maga[$i]."我不信");
}
}
//下载处理过后的模板Excel
ob_clean();
ob_start();
$filename='fapiao.xls';
$objWriteHTML = new \PHPExcel_Writer_Excel5($PHPExcel);//输出EXCLl格式的对象
header("Content-type: application/octet-stream;charset=utf-8");
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename='.$filename);//日期为文件名后缀
header('Cache-Control: max-age=0');
$objWriteHTML->save("php://output");
ob_end_flush();
}