后台PHPEXCEL停用很久,无法支持最新的Office版本。因此,phpSpreadsheet被广泛用作excel的导出方案。这里使用禅道来测试phpSpreadsheet的导出集成。环境PHP7.2.34Apachehttpd2.4Mysql5.7.33禅道开源版15.4参考文档github地址https://github.com/PHPOffice/PhpSpreadsheet文档地址https://phpspreadsheet.readthedocs.io/en/latest/安装SDK1,安装ComposerWindows环境:请访问Composer官网下载安装包,并在https://getcomposer.org/downl安装。'Linux环境:请运行代码curl-sS[https://getcomposer.org/installer](https://getcomposer.org/installer)|phpsudomvcomposer.phar/usr/local/bin/composer2,获取SDK文件在禅道的www目录下,新建一个excel目录,将命令行切换到www/excel目录下,运行命令composerrequirephpoffice/phpspreadsheet运行成功后,会生成一个vendor文件夹和几个文件,用于禅道EXCEl导出类写在模块目录下,新建一个excel文件夹,在里面按照禅道结构,新建一个lang文件夹和lang文件,以及模型文件1、zh-cn.php暂时没有内容,如有需要,添加2、模型。phpgetActiveSheet();//设置列宽(这个可以配置成数组作为入参,这里偷懒)$sheet->getColumnDimension('A')->setWidth(10);$sheet->getColumnDimension('B')->setWidth(10);$sheet->getColumnDimension('C')->setWidth(10);$sheet->getColumnDimension('D')->setWidth(10);$sheet->getColumnDimension('E')->setWidth(10);$sheet->getColumnDimension('F')->setWidth(10);$sheet->getColumnDimension('G')->setWidth(10);$sheet->getColumnDimension('H')->setWidth(10);$sheet->getColumnDimension('I')->setWidth(10);$sheet->getColumnDimension('J')->setWidth(12);$sheet->getColumnDimension('K')->setWidth(12);$sheet->getColumnDimension('L')->setWidth(10);$sheet->getColumnDimension('M')->setWidth(10);$sheet->getColumnDimension('N')->setWidth(15);$sheet->getColumnDimension('O')->setWidth(10);$sheet->getColumnDimension('P')->setWidth(10);$sheet->getColumnDimension('Q')->setWidth(18);$sheet->getColumnDimension('R')->setWidth(10);$sheet->getColumnDimension('S')->setWidth(18);//左对齐$styleArray1=['alignment'=>['horizo??ntal'=>\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT,],];$sheet->getStyle('G')->applyFromArray($styleArray1);//右对齐$styleArray2=['alignment'=>['horizo??ntal'=>\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT,],];$sheet->getStyle('I')->applyFromArray($styleArray2);//单元格线框$styleArray3=['borders'=>['outline'=>['borderStyle'=>\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,'color'=>['argb'=>'0000000'],],],];//方法2,使用setCellValue//Header//设置单元格内容$titCol='A';foreach($titleas$key=>$value){//将单元格内容写入$sheet->setCellValue($titCol.'1',$value);//设置线框$sheet->getStyle($titCol.'1')->applyFromArray($styleArray3);//设置背景$sheet->getStyle($titCol.'1')->getFont()->setBold(true);$山雀++;}$行=2;//从第二行开始foreach($dataas$item){$dataCol='A';foreach($itemas$value){//将单元格内容写入$sheet->setCellValue($dataCol.$row,$value);//设置线框$sheet->getStyle($dataCol.$row)->applyFromArray($styleArray3);$数据列++;}$行++;}//将输出重定向到客户端的Web浏览器(Xlsx)header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');header('Content-Disposition:attachment;filename="'.$name.'"');header('缓存控制:max-age=0');//如果你服务于IE9,那么可能需要以下内容header('Cache-Control:max-age=1');//如果您通过SSL为IE提供服务,则可能需要以下内容header('Expires:Mon,26Jul199705:00:00GMT');//过去的日期header('Last-Modified:'.gmdate('D,dMYH:i:s').'GMT');//始终修改header('Cache-Control:cache,must-revalidate');//HTTP/1.1标头('Pragma:public');//HTTP/1.0$writer=IOFactory::createWriter($spreadsheet,'Xlsx');$writer->save('php://output');出口;}}使用禅道EXCEL导出类在任意的控件文件里$this->loadModel('excel');然后构造excel导出参数,并使用导出类导出EXCEL$title=array();$title[]=$this->lang->data->status;$title[]=$this->lang->data->id;//获取数据,根据实际情况构建$datas=$this->data->getDataLists();foreach($datasas$data){unset($rowdata);$rowdata[]=$this->lang->data->statusList[$data->status];$rowdata[]=$data->id$alldatas[]=$rowdata;}$this->excel->export("exportexample".helper::now().".xlsx",$title,$alldatas);至此,如何在禅道中集成PhpSpreadsheet就完成了!
