EasyExcel 和 Hutool工具中封装的Excel工具,读取最简易excel数据。
Excel信息如下:
读成的结果:
需要依赖
cn.hutool hutool-allcom.alibaba easyexcel3.3.2 org.projectlombok lombok
直接读取为实体类
tip:不涉及合并单元格、表头一致。
创建表头对应实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TestDomainEasyExcelDomain {
@ExcelProperty(index = 0)
private String serialNum;
@ExcelProperty(index = 1)
private String code;
@ExcelProperty(index = 2)
private String name;
}
Case1,不写监听器。
缺点:这个不能设置sheet页
public static void easyExcelRead() throws IOException {
String filePath = "test.xlsx";
Path path = Paths.get(filePath);
InputStream inputStream = Files.newInputStream(path);
List list = EasyExcel
.read(inputStream)
.head(TestDomainEasyExcelDomain.class)
.headRowNumber(1)
.doReadAllSync();
System.out.println(JSONUtil.toJsonPrettyStr(list));
}
Case2 可以指定sheet页。【需要自定义监听器】
public class MyLevel1Listener extends AnalysisEventListener{
private List dataList = new ArrayList();
/**
* When analysis one row trigger invoke function.
*
* @param data one row value. It is same as {@link AnalysisContext#readRowHolder()}
* @param context analysis context
*/
@Override
public void invoke(TestDomainEasyExcelDomain data, AnalysisContext context) {
dataList.add(data);
}
/**
* if have something to do after all analysis
*
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
System.out.println("读取数据完成");
}
public List getDataList() {
return dataList;
}
}
读取代码:
public static void easyExcelReadWithSheet() throws IOException {
String filePath = "test.xlsx";
Path path = Paths.get(filePath);
InputStream inputStream = Files.newInputStream(path);
MyLevel1Listener listener = new MyLevel1Listener();
EasyExcel
.read(inputStream)
.head(TestDomainEasyExcelDomain.class)
.headRowNumber(1)
.registerReadListener(listener)
.sheet(0)
.doRead();
List dataList = listener.getDataList();
System.out.println(JSONUtil.toJsonPrettyStr(dataList));
}
Case3 Hutool方式
读取代码:
/**
* hutool-excel读取
*/
public static void hutoolExcelRead() throws IOException {
String filePath = "test.xlsx";
Path path = Paths.get(filePath);
InputStream inputStream = Files.newInputStream(path);
// 读取指定sheet
ExcelReader reader = ExcelUtil.getReader(inputStream, 0);
// 这里需要自设置别名 --> 自定义注解
Map aliasMap =
HutoolExcelUtils.aliasAnnotation2Map(TestDomainEasyExcelDomain.class);
reader.setHeaderAlias(aliasMap);
List list = reader.readAll(TestDomainEasyExcelDomain.class);
System.out.println(JSONUtil.toJsonPrettyStr(list));
}
这里使用Hutool工具类来进行读取,还需要添加三个代码:
1、自定义注解:HutoolExcelAlias。
2、在实体类上添加自定义注解。
3、将注解内容转成Map(Hutool 需要表头的alia)的工具类:HutoolExcelUtils。
自定义注解:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface HutoolExcelAlias {
String alias();
}
在实体类添加自定义注解
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TestDomainEasyExcelDomain {
@HutoolExcelAlias(alias = "序号")
private String serialNum;
@HutoolExcelAlias(alias = "代号")
private String code;
@HutoolExcelAlias(alias = "名称")
private String name;
}
将注解内容转成Map(Hutool 需要表头的alias)的工具类:
public class HutoolExcelUtils {
public static Map aliasAnnotation2Map(Class myClass){
Field[] fields = ReflectUtil.getFields(myClass);
Map map = MapUtil.newHashMap();
for (Field f: fields){
if (AnnotationUtil.hasAnnotation(f, HutoolExcelAlias.class)){
HutoolExcelAlias annotation = AnnotationUtil.getAnnotation(f, HutoolExcelAlias.class);
map.put(annotation.alias(), f.getName());
}
}
return map;
}
}
完整代码见GIT:完整代码地址
【信息由网络或者个人提供,如有涉及版权请联系COOY资源网邮箱处理】
© 版权声明
部分内容为互联网分享,若有侵权请联系站长删除。
THE END
暂无评论内容