做網(wǎng)站 創(chuàng)業(yè)seo查詢平臺(tái)
問題:如圖,1部分的表頭是動(dòng)態(tài)的根據(jù)日期變化,2部分是數(shù)據(jù)庫對應(yīng)的字段,靜態(tài)不變的;
解決方案:如果不看1的部分,2部分+內(nèi)容可以根據(jù)實(shí)體類+注解的方式導(dǎo)出,那么我們是不是可以先將動(dòng)態(tài)表頭1 寫入到Excel中,然后再用注解+實(shí)體類的方式將2部分和內(nèi)容寫入到Excel中。
// 以下是偽代碼參考,無法直接運(yùn)行// 設(shè)置動(dòng)態(tài)表頭
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();
// 創(chuàng)建sheet
WriteSheet writeSheet = EasyExcel.writerSheet(String.format(sheetName, LocalDate.now().getYear(), LocalDate.now().getMonth().getValue())).needHead(Boolean.FALSE).build();
// 將動(dòng)態(tài)表頭寫入sheet,new ArrayList<>()代表寫入空數(shù)據(jù)
WriteTable writeTable0 = EasyExcel.writerTable(0).head(headList).registerWriteHandler(new OnceAbsoluteMergeStrategy(0, 2, 0, 7)).needHead(Boolean.TRUE).build();excelWriter.write(new ArrayList<>(), writeSheet, writeTable0);
// 將靜態(tài)表頭+內(nèi)容寫入sheet,tPublicityInfos代表內(nèi)容數(shù)據(jù)
WriteTable writeTable2 = EasyExcel.writerTable(3).head(TPublicityInfo.class).relativeHeadRowIndex(2).needHead(Boolean.TRUE).build();excelWriter.write(tPublicityInfos, writeSheet, writeTable2);
excelWriter.finish();
下邊是項(xiàng)目中的完整代碼,可以做簡單參考
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();
}
本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布!