easyExcel自定义实体字段映射逻辑

easyExcel自定义实体字段映射逻辑

背景:需求让根据模板批量导入数据到数据库,模板中有些数据是列表选择的,并且数据库中保存的真实值是选中数据对应的数据字典的code值。

技术实现:easyExcel

数据如下图:

在这里插入图片描述

实现流程代码:

1.定义实体,即excel一行数据解析对应的类。

在这里插入图片描述

converter属性指定该字段对应的转换逻辑实现类。

2.定义转换类。

在这里插入图片描述

继承easyExcel提供的转换类,并重写其中的一个方法。

3.定义监听器。

在这里插入图片描述

继承easyExcel提供的类,根据自己的业务逻辑重写部分方法。

invoke方法是每读取一行执行一次,doAfterAll方法是在excel读取完成后执行。

4.执行。

在这里插入图片描述

最终效果,即用户选择”因素法“,excel读取映射的实体类中该字段值是converter中定义的”11“数据字典值。

EasyExcel是一个基于Java语言,功能强大的Excel操作工具,可以实现非常灵活的Excel导入导出功能。要实现自定义字段导出,可以通过实现EasyExcel的WriteHandler接口来实现。 首先,需要定义一个实现WriteHandler接口的类,例如: ```java public class CustomFieldHandler implements WriteHandler { // 自定义字段 private List<String> fields; public CustomFieldHandler(List<String> fields) { this.fields = fields; } @Override public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { // 在Sheet创建后,添加自定义字段行 Sheet sheet = writeSheetHolder.getSheet(); sheet.createRow(0); for (int i = 0; i < fields.size(); i++) { sheet.getRow(0).createCell(i).setCellValue(fields.get(i)); } } @Override public void beforeSheetFlush(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder, Sheet sheet) { // 在Sheet刷新前,设置自定义字段列宽 for (int i = 0; i < fields.size(); i++) { sheet.setColumnWidth(i, 20 * 256); } } @Override public void afterRowCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder, Row row, Integer rowIndex, Integer relativeRowIndex, Boolean isHead) { // 在每行创建后,设置自定义字段值 if (isHead) { return; } for (int i = 0; i < fields.size(); i++) { row.createCell(i).setCellValue("自定义字段值"); } } } ``` 上述代码中,CustomFieldHandler类实现了WriteHandler接口,并在其中实现了afterSheetCreate、beforeSheetFlush和afterRowCreate三个方法,分别对应Sheet创建后、Sheet刷新前和每行创建后的处理逻辑。其中,afterSheetCreate方法会在Sheet创建后添加一行自定义字段行,beforeSheetFlush方法会在Sheet刷新前设置自定义字段列宽,afterRowCreate方法会在每行创建后设置自定义字段值。 接下来,可以通过EasyExcel的WriteBuilder来构建导出流程,并将CustomFieldHandler类实例化并添加到WriteBuilder中。例如: ```java List<String> fields = new ArrayList<>(); fields.add("自定义字段1"); fields.add("自定义字段2"); // 构建导出流程 OutputStream out = new FileOutputStream("test.xlsx"); WriteWorkbook writeWorkbook = EasyExcel.write(out).registerWriteHandler(new CustomFieldHandler(fields)).build(); // 写入数据 WriteSheet writeSheet = EasyExcel.writerSheet().build(); writeWorkbook.write(dataList, writeSheet); // 完成导出 writeWorkbook.finish(); ``` 上述代码中,首先定义了一个自定义字段fields,然后通过EasyExcel的WriteBuilder构建导出流程,并将CustomFieldHandler类实例化并注册到WriteBuilder中。在写入数据,会自动调用CustomFieldHandler中的方法来处理自定义字段导出逻辑。 通过上述方法,就可以很方便地实现自定义字段导出功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值