前言:
目前姐妹们对“动态生成excel表头java导出”大概比较看重,各位老铁们都想要了解一些“动态生成excel表头java导出”的相关内容。那么小编在网上收集了一些对于“动态生成excel表头java导出””的相关资讯,希望朋友们能喜欢,兄弟们一起来学习一下吧!问题:如图,1部分的表头是动态的根据日期变化,2部分是数据库对应的字段,静态不变的;
解决方案:如果不看1的部分,2部分+内容可以根据实体类+注解的方式导出,那么我们是不是可以先将动态表头1 写入到Excel中,然后再用注解+实体类的方式将2部分和内容写入到Excel中。
// 以下是伪代码参考,无法直接运行// 设置动态表头List<String> head = new ArrayList<>();String name = String.format(sheetName, LocalDate.now().getYear(), LocalDate.now().getMonth().getValue());if (StringUtils.isNotBlank(publicityReq.getCountyId())) { name = name + "\n" + depart + departName;}head.add(name);headList.add(head);ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), TPublicityInfo.class).build();// 创建sheetWriteSheet writeSheet = EasyExcel.writerSheet(String.format(sheetName, LocalDate.now().getYear(), LocalDate.now().getMonth().getValue())).needHead(Boolean.FALSE).build();// 将动态表头写入sheet,new ArrayList<>()代表写入空数据WriteTable writeTable0 = EasyExcel.writerTable(0).head(headList).registerWriteHandler(new OnceAbsoluteMergeStrategy(0, 2, 0, 7)).needHead(Boolean.TRUE).build();excelWriter.write(new ArrayList<>(), writeSheet, writeTable0);// 将静态表头+内容写入sheet,tPublicityInfos代表内容数据WriteTable writeTable2 = EasyExcel.writerTable(3).head(TPublicityInfo.class).relativeHeadRowIndex(2).needHead(Boolean.TRUE).build();excelWriter.write(tPublicityInfos, writeSheet, writeTable2);excelWriter.finish();
下边是项目中的完整代码,可以做简单参考
public void exportExcel(Principal principal, HttpServletResponse response, PublicityInfoReq publicityReq) throws IOException { String sheetName = "%s年%s月xxxx"; String depart = "单位:"; String personId = AuthenticationInfo.getUserId(principal); String departsCode = ""; if (StringUtils.isNotEmpty(publicityReq.getCorpId())) { DepartInfo departInfo = iDepartSCodeService.getVDeptById(publicityReq.getCorpId()); departsCode = departInfo.getDepartScode(); } else { departsCode = iDepartSCodeService.getDeptScode(personId); } publicityReq.setDepartsCode(departsCode); List<TPublicityInfo> tPublicityInfos = publicityMapper.listByPublicity(publicityReq); if (CollectionUtils.isNotEmpty(tPublicityInfos)) { for (int i = 0; i < tPublicityInfos.size(); i++) { TPublicityInfo tPublicityInfo = tPublicityInfos.get(i); tPublicityInfo.setNum(i+1); } } List<String> departNames = this.baseMapper.selectDepartNameByDepartId(publicityReq.getCountyId()); String departName = ""; if (CollectionUtils.isNotEmpty(departNames) && departNames.size() == 1) { departName = departNames.get(0); } List<List<String>> headList = new ArrayList<>(); List<String> head = new ArrayList<>(); String name = String.format(sheetName, LocalDate.now().getYear(), LocalDate.now().getMonth().getValue()); if (StringUtils.isNotBlank(publicityReq.getCountyId())) { name = name + "\n" + depart + departName; } head.add(name); headList.add(head); ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), TPublicityInfo.class).build(); WriteSheet writeSheet = EasyExcel.writerSheet(String.format(sheetName, LocalDate.now().getYear(), LocalDate.now().getMonth().getValue())).needHead(Boolean.FALSE).build(); WriteTable writeTable0 = EasyExcel.writerTable(0).head(headList).registerWriteHandler(new OnceAbsoluteMergeStrategy(0, 2, 0, 7)).needHead(Boolean.TRUE).build(); excelWriter.write(new ArrayList<>(), writeSheet, writeTable0); WriteTable writeTable2 = EasyExcel.writerTable(3).head(TPublicityInfo.class).relativeHeadRowIndex(2).needHead(Boolean.TRUE).build(); excelWriter.write(tPublicityInfos, writeSheet, writeTable2); excelWriter.finish();}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #动态生成excel表头java导出