1、导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.5</version>
</dependency>
使用EasyExcel进行操作 Excel数据文件,如版本冲突,可替换为其他版本
2、读取Class @ExcelProperty属性
/**
* 获取实体类中包含 ExcelProperty 属性的字段属性 对应的 住注解值
* @param clazz 需要解析的 实体类
* @param propertySize 获取到注解属性值的位数, 默认为1
*/
public static List<String> readExcelPropertyAnnotations(Class<?> clazz, int propertySize) {
propertySize = propertySize == 0 ? 1 : propertySize;
ArrayList<String> properties = new ArrayList<>();
for (Field field : clazz.getDeclaredFields()) {
if (field.isAnnotationPresent(ExcelProperty.class)) {
ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class);
String[] value = excelProperty.value();
propertySize = Math.min(propertySize, value.length);
properties.addAll(Arrays.asList(value).subList(0, propertySize));
}
}
return properties;
}
/**
* 获取实体类中包含 ExcelProperty 属性的字段属性 对应的 住注解值
* @param clazz 需要解析的 实体类
*/
public static List<String> readExcelPropertyAnnotations(Class<?> clazz) {
return readExcelPropertyAnnotations(clazz, 1);
}
注意项:@ExcelProperty注解中 value属性是可以添加数组的,此方法默认只获取一个,如果value属性是数组,就获取数组中第一个属性,@ExcelProperty使用样例如下
3、读取导入文件表头信息集合
public static List<String> readExcelHeaders(MultipartFile excel) throws IOException {
return readExcelHeaders(excel, 0, 1);
}
/**
* 读取 Excel 文件中的表头
* @param excel excel 导入文件
* @param sheetNum 读取的 sheet 页码, 默认0(第一页)
* @param headerLine 表头所在行 ,默认1(第一行)
* @return 表头数据集合
* @throws IOException 文件读取异常
*/
public static List<String> readExcelHeaders(MultipartFile excel, int sheetNum, int headerLine) throws IOException {
sheetNum = Math.max(sheetNum, 0);
headerLine = Math.max(headerLine, 1);
ArrayList<String> headers = new ArrayList<>();
EasyExcel.read(excel.getInputStream(), null, new AnalysisEventListener<Object>() {
@Override
public void invoke(Object data, AnalysisContext context) {
}
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
headers.addAll(headMap.values());
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
}
}).sheet(sheetNum).headRowNumber(headerLine).doRead();
return headers;
}