工具类
废话不多说,直接上工具类
/**
*
* @param filePath
* @param sheetNo sheet位置 从0开始
* @param startRowNo 开始读取的行号 从0开始
* @param headRow 表头行号 从1开始 只读取数据,从0开始 返回的map带表头
* @param readRow 读取行数,-1表示读取所有行
* @return List<Map<String, Object>>
*/
public static List<Map<String, Object>> readExcelToMap(String filePath, int sheetNo, int startRowNo, int headRow, int readRow) {
List<Map<String, Object>> resultList = new ArrayList<>();
EasyExcel.read(filePath, new AnalysisEventListener<Map<String, Object>> () {
@Override
public void invoke(Map<String, Object> data, AnalysisContext context) {
//当前行号
Integer currentRowNo = context.readRowHolder().getRowIndex();
//判断当前行号是否在读取范围内
if (currentRowNo >= startRowNo) {
//如果读取所有,或者 当前行没有达到行数限制 则解析数据
if (readRow == -1 || currentRowNo < startRowNo + readRow) {
resultList.add(data);
}
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
log.info("excel数据解析完成,sheetName:{},sheetNo:{}",context.readSheetHolder().getSheetName(),context.readSheetHolder().getSheetNo());
}
}).sheet(sheetNo).headRowNumber(headRow).doRead();
return resultList;
}
使用方法
public static void main(String[] args) {
List<Map<String, Object>> fyndiqEconomyInvoices = ExcelUtils.readExcelToMap("C:\\Users\\admin\\Downloads\\fyndiq3.1-3.31到账核销数据.xlsx", 0, 0, 0, -1);
for (Map<String, Object> fyndiqEconomyInvoice : fyndiqEconomyInvoices) {
System.out.println(fyndiqEconomyInvoice);
}
}
工具类传参,是否需要带表头,从第几行开始 注释也都写的很清楚。~