文章前文名词解析:
1. EasyExcel是关于Excel的操作封装。
2. Converter是关于EasyExcel在导入数据或者导出数据遇到复杂数据类型的时候的自我定义的处理方式。
3. Entity(实体)指的是在导入导出的实体操作数据对象。
4. 注解指的是在数据导入导出的过程中将复杂数据类型导出处理方式和自定义或者已定义的Converter的连接方式。
程序设计规则:
为什么写这个呢?因为不同的公司拥有不同的设计规则。相同的事情具有不同的处理方式,但会得到相同的结果。
在本篇文章中:坚持一个原则:不破坏Entity(实体)的完整性。简单来说就是不能使用注解的方式去解决它的导入导出问题。
那么不实用注解如何让它生效以及自我复杂格式,绑定处理方式呢?答案其实EasyExcel就已经准备了方法。
EasyExcel专用对象了解:
EasyExcelFactory : ExcelWriterBuilder,ExcelReaderBuilder.
ExcelWriterBuilder : ExcelWriter(简单来说就是当前的写入文件对象)
ExcelReaderBuilder : ExcelReader(简单来说就是当前的写入文件对象)
WriteSheet : excel文件的一个Sheet空间。简单来说就是一个工作表
EasyExcel如何让Converter生效:
让Converter生效的方式有以下几种:
1.、使用注解在实体对象上面,百度一大堆
2、 首先找到EasyExcel读取存在Converter的方法,然后继承并添加新的Converter方法。
3、 就是在EasyExcel的读写对象里面进行注册Converter对象。
我使用的就是第三种,前面两种,第一种就是破坏了设计原则,第二种就是实现起来的最终效果太.....
第三种非常简单,就一行代码就好了。
写入:
ExcelWriterBuilder write.registerConverter(new LocalDateConverter());
好多的Converter不就要写好多个?封装就好了,这个对象只需要一个OutputStream对象就好了
读取:
采用Map<Integer,Object>对象接收,然后根据不同的数据类型采用不同的Converter。
使用的时候就调用实体传入,封装的解析方法解析得到完整对象即可。
简单版署一个读入的解析内容得到List配置文件类:
/**
* <p>
* 通过反射机制,获取对象的注解内容,实现通过注解内容进行赋值.
* </p>
*
* @author ZJW
* @since 2020-12-25 15:26
*/
public class ReflexByApiModelProperty {
/**
* <p>
* 调换excel导入的头部对应数据.
* </p>
* @param noExchangeHead excel读取的表头数据
*/
public Map<String, Integer> exchangeMap(Map<Integer, String> noExchangeHead) {}
/**
* <p>
* 根据Excel文件头的表头内容获取表头值(List),再根据.
* </p>
* @param exchangeHead 表头:列值
* @param valueMap 列值:数据值
* @param target 解析对象
*/
public <T> T sortRules(Class<T> target, Map<String, Integer> exchangeHead, Map<Integer, Object> valueMap){}
}
简单版署一个写入的方法配置文件类:
/**
* <p>
* easyExcel数据写入对象数据封装.
* </p>
* @author ZJW
* @since 2021/03/30
*/
public class ExcelWriterConfig {
public static ExcelWriterBuilder getExcelWriterBuilder(OutputStream outputStream) {
ExcelWriterBuilder write = null;
try {
// 数据导出
write = EasyExcel.write(outputStream);
// LocalDate 解析对象
write.registerConverter(new LocalDateConverter());
// LocalDateTime 解析对象
write.registerConverter(new LocalDateTimeConverter());
// TimeStamp 解析对象
write.registerConverter(new TimestampConverter());
} catch (Exception e) {
e.printStackTrace();
}
return write;
}
public static ExcelWriter setWithTemplate(OutputStream outputStream, InputStream inputStream) {
return getExcelWriterBuilder(outputStream).withTemplate(inputStream).build();
}
public static WriteSheet setWriteSheet(Integer sheetNo, String sheetName) {
return EasyExcel.writerSheet(sheetNo, sheetName).build();
}
}