最近遇到表头字段不固定,需要下载Excel模板的场景,特意记录一下 表头数据动态生成,根据业务场景不同加载不同表头 Controller下载动态模板paramresponsereturnPostMapping(valuedownloadTemplate,producesapplicationjson;charsetUTF8)PreAuth(valuebuSuppDelMeritsDataMaintYW:download,projectParamConstants。DEFAULTPROJECT,connectParamConstants。DEFAULTPERMISSIONCONNECT,logicalLogical。OR)Log(titleTITLECONTENT清单下载,navNameNAVNAME,actionUniqueKeyNEMUNAME,buSuppDelMeritsDataMaintYW:download,interfaceTypeInterfaceType。INSIDE,logType2)publicvoiddownloadTemplate(RequestBodySrmRecVOvo,HttpServletResponseresponse){buContractSignManageService。downloadTemplate(response,vo);} ServiceImpl下载动态模板paramresponsereturnOverridepublicvoiddownloadTemplate(HttpServletResponseresponse,SrmRecVOvo){获取动态表头if(StringUtils。isEmpty(vo。getObjectID())StringUtils。isEmpty(vo。getObjectType())){thrownewBadRequestException(MsgConstants。DEFAULTPARAMETERSISNULL);}查询合同模板中制定表格类型变量ListBuNonProEcmVariableEntityvariableListbuTemplateVariableService。list(newLambdaQueryWrapperBuNonProEcmVariableEntity()。eq(BuNonProEcmVariableEntity::getTemplateCode,vo。getObjectID())。eq(BuNonProEcmVariableEntity::getTableFlag,BuContractManageConstants。YESORNOYES)。eq(BuNonProEcmVariableEntity::getVariableName,vo。getObjectType()));if(CollectionUtils。isNotEmpty(variableList)){查询表格的自定义变量ListBuNonProEcmtableVariableEntitytableVariableListbuTemplateTableVariableService。list(newLambdaQueryWrapperBuNonProEcmtableVariableEntity()。eq(BuNonProEcmtableVariableEntity::getTemplateCode,vo。getObjectID()));if(CollectionUtils。isEmpty(tableVariableList)){thrownewBadRequestException(MsgConstants。BUNONPROCONTRACTTEMPLATETABLEERROR);}ListStringheadersnewArrayList();for(BuNonProEcmtableVariableEntityvariableEntity:tableVariableList){headers。add(variableEntity。getVariableName());加载表头数据}创建workBookHSSFWorkbookhssfWorkbooknewHSSFWorkbook();HSSFSheetsheethssfWorkbook。createSheet();addHeaders(hssfWorkbook,sheet,headers);Stringfilenamevo。getObjectType()System。currentTimeMillis();ServletOutputStreamfosnull;try{fosresponse。getOutputStream();mime类型response。setContentType(applicationvnd。openxmlformatsofficedocument。spreadsheetml。sheet);response。setHeader(Contentdisposition,inline;filenamefilename。xls);hssfWorkbook。write(fos);fos。close();}catch(Exceptione){e。printStackTrace();}}}初始化表头paramwbparammainSheetparamheadersprivatestaticvoidaddHeaders(HSSFWorkbookwb,HSSFSheetmainSheet,ListStringheaders){表头样式,居中加粗HSSFCellStylestylewb。createCellStyle();HSSFFontfontwb。createFont();font。setBold(true);字体加粗style。setFillForegroundColor(IndexedColors。BLUEGREY。getIndex());设置背景色style。setFillPattern(FillPatternType。FINEDOTS);设置图案样式style。setFillBackgroundColor(IndexedColors。GREY25PERCENT。getIndex());style。setAlignment(HorizontalAlignment。CENTER);水平居中style。setVerticalAlignment(VerticalAlignment。CENTER);垂直居中生成sheet1内容,第一个sheet的第一行为标题HSSFRowrowFirstmainSheet。createRow(0);冻结第一行mainSheet。createFreezePane(0,1,0,1);写标题for(inti0;iheaders。size();i){HSSFCellcellrowFirst。createCell(i);获取第一行的每个单元格mainSheet。setColumnWidth(i,4000);设置每列的列宽cell。setCellStyle(style);加样式cell。setCellValue(headers。get(i));往单元格里写数据}}