导入maven依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.6.3</version>
</dependency>
/**
* Excel大数据读取工具类
*/
public class BigExcelUtil {
private static List<Object> headLine;
private static final List<Map<String, Object>> datas = new ArrayList<>();
/**
* 读取数据
* @param path 文件路径
* @param sheetIndex Excel中Sheet下标
*/
private static void readBigExcel(String path, int sheetIndex) {
datas.clear();
ExcelUtil.readBySax(path, sheetIndex, (sheetIndex1, rowIndex, rowList) -> {
if (rowIndex == 0) {
headLine = new ArrayList<>(rowList);
} else {
Map<String, Object> tMap = new HashMap<>(rowList.size());
for (int i = 0; i < rowList.size(); i++) {
tMap.put(String.valueOf(transStr(String.valueOf(headLine.get(i)))), transStr(String.valueOf(rowList.get(i))));
}
datas.add(tMap);
}
});
}
/**
* 读取指定sheet数据
* @param path 文件路径
* @param sheetIndex sheet下标
* @param c 类类型
* @param <T> 返回值为List<T>
* @return 结果
*/
@SuppressWarnings("unchecked")
public static <T> List<T> read(String path, int sheetIndex, Class<T> c) {
return read(path, sheetIndex, c, Collections.EMPTY_MAP);
}
/**
* 读取所有sheet数据
* @param path 文件路径
* @param c 类类型
* @param <T> 返回值为List<T>
* @return 结果
*/
@SuppressWarnings("unchecked")
public static <T> List<T> read(String path, Class<T> c) {
return read(path, -1, c, Collections.EMPTY_MAP);
}
/**
* 读取Excel数据
* @param path 文件路径
* @param sheetIndex sheet下标
* @param c 类类型
* @param fieldMapping 字段映射
* @param <T> 返回值为List<T>
* @return 结果
*/
public static <T> List<T> read(String path, int sheetIndex, Class<T> c, Map<String, String> fieldMapping) {
CopyOptions copyOptions = CopyOptions.create();
if (CollUtil.isNotEmpty(fieldMapping)) {
copyOptions.setFieldMapping(fieldMapping);
}
readBigExcel(path, sheetIndex);
List<T> dataList = new ArrayList<>();
for (Map<String, Object> data : datas) {
dataList.add(BeanUtil.fillBeanWithMap(data, ReflectUtil.newInstanceIfPossible(c), copyOptions));
}
return dataList;
}
/**
* 处理字符串
* @param str 字符串
* @return 结果
*/
private static Object transStr(String str) {
return str == null || "".equals(str) ? null : str;
}
}