Java中EasyPoi导出复杂合并单元格的方法

网友投稿 889 2022-11-06


Java中EasyPoi导出复杂合并单元格的方法

前言:

上星期做了一个Excel的单元格合并,用的是EasyPoi,我之前合并单元格都是原生的,第一次使用EasyPoi合并也不太熟悉,看着网上自己套用,使用后发现比原生的方便些,贡献一下,也给其他用到合并而且用的是EasyPoi的小伙伴节省下时间。

导出模板:

坐标:

版本号,自己来定,可以去官网查看:EasyPoi官网

cn.afterturn

easypoi-base

4.0.0

cn.afterturn

easypoi-annotation

4.0.0

实现代码:

//表头设置

List colList = new ArrayList();

ExcelExportEntity colEntity = new ExcelExportEntity("经销商", "distributorName");

colEntity.setNeedMerge(true);

colEntity.setWidth(20);

colList.add(colEntity);

colEntity = new ExcelExportEntity("科室", "dept");

colEntity.setNeedMerge(true);

colList.add(colEntity);

colEntity = new ExcelExportEntity("部门", "region");

colEntity.setNeedMerge(true);

colList.add(colEntity);

colEntity = new ExcelExportEntity("省份", "province");

colEntity.setNeedMerge(true);

colList.add(colEntity);

colEntity = new ExcelExportEntity("门店数量", "storeNum");

colEntity.setNeedMerge(true);

colEntity.setStatistics(true);

colList.add(colEntity);

Map map = DateUtils.getLastDayOfMonthByStr(request.getMonthStr());

Integer dayNum = map.get("dayNum");

for (int i = 1; i <= dayNum; i++) {

ExcelExportEntity group_1 = new ExcelExportEntity(i + "日", "day");

List exportEntities = new ArrayList<>();

ExcelExportEntity appalyExcel = new ExcelExportEntity("申请数量", "applyNum" + i);

appalyExcel.setStatistics(true);

exportEntities.add(appalyExcel);

ExcelExportEntity adoptExcel = new ExcelExportEntity("通过数量", "adoptNum" + i);

adoptExcel.setStatistics(true);

exportEntities.add(adoptExcel);

group_1.setList(exportEntities);

colList.add(group_1);

}

//文件数据

List> list = new ArrayList<>();

List disList = register.getStoreNewAddReportVO().getDistributorStoreNewAddReportVOList();

int size = disList.size();

for (int i = 0; i < size; i++) {

StoreNewAddReportVO.DistributorStoreNewAddReportVO dis = disList.get(i);

Map valMap = new HashMap<>();

valMap.put("distributorName", dis.getDistributorName());

valMap.put("dept", dis.getDept());

valMap.put("region", dis.getRegion());

valMap.put("province", dis.getProvince());

valMap.put("storeNum", dis.getStoreNum());

List dayDataList = dis.getDayDataList();

Map> collectMap = Maps.newHashMap();

if (CollectionUtils.isNotEmpty(dayDataList)) {

collectMap = dayDataList.stream().collect(Collectors.groupingBy(StoreNewAddReportVO.dayData::getDayStr));

}

List> list_1 = new ArrayList<>();

Map valMap_1 = new HashMap<>();

for (int j = 1; j <= dayNum; j++) {

List dayData = collectMap.get(String.valueOf(j));

int applyflag = 0;

int adoptflag = 0;

if (CollectionUtils.isNotEmpty(dayData)) {

applyflag = dayData.get(0).getApplyNum();

adoptflag = dayhttp://Data.get(0).getAdoptNum();

}

valMap_1.put("applyNum" + j, applyflag);

valMap_1.put("adoptNum" + j, adoptflag);

}

list_1.add(valMap_1);

valMap.put("day", list_1);

list.add(valMap);

}

//导出

Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("【" + request.getMonthStr() + "】门店注册日明细数据", "数据"), colList, list);

Sheet sheet = workbook.YxFRDrgetSheet("数据");

Row row = sheet.getRow(sheet.getLastRowNum());

Cell cell = row.getCell(0);

cell.setCellValue("总计");

CellStyle cellStyle = workbook.createCellStyle();

cellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中

cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中

Font font = workbook.createFont();

font.setFontHeightInPoints((short) 15);

font.setFontName("Trebuchet MS");

cellStyle.setFont(font);

cell.setCellStyle(cellStyle);

CellRangeAddress range_0 = new CellRangeAddress(sheet.getLastRowNum(), sheet.getLastRowNum(), 0, 3);

sheet.addMergedRegion(range_0);

File file = new File("D:\\".concat(UUID.randomUUID().toString().concat(".xls")));

FileOutputStream fileOutputStream = null;

try {

fileOutputStream = new FileOutputStream(file);

workbook.write(fileOutputStream);

} catch (Exception e) {

log.error("门店注册日workbook写入到文件中失败,错误信息:{}", ExceptionUtils.getStackTrace(e));

} finally {

if (null != fileOutputStream) {

try {

fileOutputStream.close();

} catch (IOException e) {

//skip

}

}

}

具体的API细节就不介绍了可以去官网,关键在于ExcelExportEntity 这个类,它是以map形式展现的,创建的时候设置key,设置value的根据key进行设置,上面一些StoreNewAddReportVO还有其他是我的业务类, 到时候可以替换掉。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:[leetcode] 44. Wildcard Matching
下一篇:[leetcode] 324. Wiggle Sort II
相关文章

 发表评论

暂时没有评论,来抢沙发吧~