【easypoi 模板导出嵌套 list 问题】
创始人
2024-03-29 03:34:42

easypoi 模板导出多 list 问题

  • 1背景
    • 1.1 espoi 模板定义
    • 1.2 导出结果
    • 1.3发现共享单车的数据没有显示,手动操作取消共享单车的单元格合并
    • 1.4手动取消单元格合并后数据,正常再把框线画好
    • 1.5 代码操作:用 esaypoi 处理到1.2,用基础 poi 代码处理 1.3和 1.4
    • 1.6还需要注意一点共享单车和地铁 list 不能一个有数据一个没数据,否则会导致格式错误显示
    • 1.7 代码

1背景

  • 没钱的小明去上海旅游,交通方式选择共享单车或者地铁,要统计每天小明两种交通方式费用数据如图:
    在这里插入图片描述

1.1 espoi 模板定义

在这里插入图片描述

1.2 导出结果

在这里插入图片描述

1.3发现共享单车的数据没有显示,手动操作取消共享单车的单元格合并

在这里插入图片描述
在这里插入图片描述

1.4手动取消单元格合并后数据,正常再把框线画好

在这里插入图片描述
在这里插入图片描述

1.5 代码操作:用 esaypoi 处理到1.2,用基础 poi 代码处理 1.3和 1.4

		// (1)处理共享单车细数据不显示;// (2)处理合并单元格边框实线//(3)处理共享单车和地铁没有边框实线
private void myRest(Workbook book) {Sheet firstSheet = book.getSheetAt(0);List mergedRegions = firstSheet.getMergedRegions();List removeMergedRegionIndexList = new ArrayList<>();// (1)处理付款明细数据不显示;for (int i = 0; i < mergedRegions.size(); i++) {CellRangeAddress mergedRegion = mergedRegions.get(i);int firstColumn = mergedRegion.getFirstColumn();int lastColumn = mergedRegion.getLastColumn();int firstRow = mergedRegion.getFirstRow();if(firstRow >= 2 && firstColumn >= 3 && lastColumn <= 5){removeMergedRegionIndexList.add(i);}}firstSheet.removeMergedRegions(removeMergedRegionIndexList);// (2)处理合并单元格边框实线for (CellRangeAddress mergedRegion : mergedRegions) {RegionUtil.setBorderBottom(BorderStyle.THIN, mergedRegion, firstSheet);RegionUtil.setBorderTop(BorderStyle.THIN, mergedRegion, firstSheet);RegionUtil.setBorderLeft(BorderStyle.THIN, mergedRegion, firstSheet);RegionUtil.setBorderRight(BorderStyle.THIN, mergedRegion, firstSheet);}// (3)处理共享单车和地铁没有边框实线;略,自行处理}

在这里插入图片描述

在这里插入图片描述

1.6还需要注意一点共享单车和地铁 list 不能一个有数据一个没数据,否则会导致格式错误显示

在这里插入图片描述

1.7 代码

在这里插入图片描述

package cn.afterturn.easypoi.test.excel.template;import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import cn.afterturn.easypoi.util.JSON;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.RegionUtil;
import org.junit.Before;
import org.junit.Test;import java.io.FileOutputStream;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;/*** @author xuanjinnan* @date 2022/12/9 10:32*/
public class MyComplexTemplateTest {List traffics = new ArrayList<>();@Testpublic void myNestedLoopTest() throws IOException {TemplateExportParams params = new TemplateExportParams("doc/mynestedloop.xlsx");
//		params.setColForEach(true);Map value = new HashMap<>();value.put("list",traffics);Workbook book = ExcelExportUtil.exportExcel(params, JSON.parseJson(JSON.toJson(value),Map.class));// (1)处理付款明细数据不显示;// (2)处理合并单元格边框实线// (3)处理共享单车和地铁没有边框实线myRest(book);FileOutputStream fos = new FileOutputStream("D:/home/excel/ExcelExportTemplateMyNestedLoop.xlsx");book.write(fos);fos.close();}private void myRest(Workbook book) {Sheet firstSheet = book.getSheetAt(0);List mergedRegions = firstSheet.getMergedRegions();List removeMergedRegionIndexList = new ArrayList<>();// (1)处理付款明细数据不显示;for (int i = 0; i < mergedRegions.size(); i++) {CellRangeAddress mergedRegion = mergedRegions.get(i);int firstColumn = mergedRegion.getFirstColumn();int lastColumn = mergedRegion.getLastColumn();int firstRow = mergedRegion.getFirstRow();if(firstRow >= 2 && firstColumn >= 3 && lastColumn <= 5){removeMergedRegionIndexList.add(i);}}firstSheet.removeMergedRegions(removeMergedRegionIndexList);// (2)处理合并单元格边框实线for (CellRangeAddress mergedRegion : mergedRegions) {RegionUtil.setBorderBottom(BorderStyle.THIN, mergedRegion, firstSheet);RegionUtil.setBorderTop(BorderStyle.THIN, mergedRegion, firstSheet);RegionUtil.setBorderLeft(BorderStyle.THIN, mergedRegion, firstSheet);RegionUtil.setBorderRight(BorderStyle.THIN, mergedRegion, firstSheet);}// (3)处理共享单车和地铁没有边框实线;略,自行处理}@Data@AllArgsConstructor@NoArgsConstructorpublic static class Traffic{private String name;private Date date;private List shareBikes;private List subways;}@Data@AllArgsConstructor@NoArgsConstructorpublic static class TrafficDetail{private Integer number;private Integer cost;}@Beforepublic void testBefore() {Traffic traffic1 = new Traffic("小明", Date.from(LocalDateTime.now().minusDays(4).atZone(ZoneId.systemDefault()).toInstant()), new ArrayList<>(Arrays.asList(new TrafficDetail(1,3),new TrafficDetail(2,4),new TrafficDetail(3,4))), new ArrayList<>(Collections.singletonList(new TrafficDetail(1, 5))));Traffic traffic2 = new Traffic("小明", Date.from(LocalDateTime.now().minusDays(3).atZone(ZoneId.systemDefault()).toInstant()), new ArrayList<>(Collections.singletonList(new TrafficDetail(1, 3))), new ArrayList<>(Arrays.asList(new TrafficDetail(1,5),new TrafficDetail(2,6),new TrafficDetail(3,7))));Traffic traffic3 = new Traffic("小明", Date.from(LocalDateTime.now().minusDays(2).atZone(ZoneId.systemDefault()).toInstant()), new ArrayList<>(Collections.singletonList(new TrafficDetail(1, 3))), new ArrayList<>(Collections.singletonList(new TrafficDetail())));Traffic traffic4 = new Traffic("小明", Date.from(LocalDateTime.now().minusDays(1).atZone(ZoneId.systemDefault()).toInstant()), new ArrayList<>(Collections.singletonList(new TrafficDetail())), new ArrayList<>(Collections.singletonList(new TrafficDetail(1, 5))));traffics.add(traffic1);traffics.add(traffic2);traffics.add(traffic3);traffics.add(traffic4);}}

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...