1、创建基础类
package com.jiuqi.governance.grid.task.template;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
import lombok.Data;
@Data
public class GridMessageDTO extends BaseRowModel {
@ExcelProperty( index = 0)
private String townName;
@ExcelProperty( index = 1)
private String villageName;
@ExcelProperty(index = 2)
private String gridName;
@ExcelProperty(index = 3)
private int houseCount;
}
package com.jiuqi.governance.grid.task.template;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
import lombok.Data;
@Data
public class WGYMessageDTO extends BaseRowModel {
@ExcelProperty(index = 0)
private String gridName;
@ExcelProperty(index = 1)
private String roleName;
@ExcelProperty(index = 2)
private String name;
@ExcelProperty(index = 3)
private String phone;
}
每一个页签创建不一样的类。
2、创建监听类
package com.jiuqi.governance.grid.task.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.jiuqi.governance.grid.task.template.GridMessageDTO;
import com.jiuqi.governance.grid.task.template.WGYMessageDTO;
import java.util.ArrayList;
import java.util.List;
/***
* 监听器
*/
public class ExcelModelListener extends AnalysisEventListener<Object> {
//页数
int sheetNum;
/**
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
*/
private static final int BATCH_COUNT = 100;
List<Object> list = new ArrayList<Object>();
private static int count = 1;
@Override
public void invoke(Object data, AnalysisContext context) {
System.out.println("解析到一条数据:{ " + data.toString() + " }");
list.add(data);
count++;
if (list.size() >= BATCH_COUNT) {
saveData(count);
list.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
saveData(count);
System.out.println("所有数据解析完成!");
System.out.println(" count :" + count);
}
/**
* 加上存储数据库
*/
private void saveData(int count) {
System.out.println("{ " + count + " }条数据,开始存储数据库!" + list.size());
list.forEach(data -> {
if (sheetNum == 1) {
//业务逻辑
GridMessageDTO grid = (GridMessageDTO) data;
} else if (sheetNum == 2) {
//业务逻辑
WGYMessageDTO wgy = (WGYMessageDTO) data;
}
});
System.out.println("存储数据库成功!");
}
public ExcelModelListener(int sheetNum) {
this.sheetNum = sheetNum;
}
}
3、执行入口
//导入
public void excelImport() {
// 读取 excel 表格的路径
String readPath = "C:\\Users\\96109\\Desktop/网格员信息.xlsx";
try {
for (int i = 1; i < 3; i++) {
if (i == 1) {
Sheet sheet = new Sheet(i, 1, GridMessageDTO.class);
EasyExcelFactory.readBySax(new FileInputStream(readPath), sheet, new ExcelModelListener(i));
} else if (i == 2) {
Sheet sheet = new Sheet(i, 1, WGYMessageDTO.class);
EasyExcelFactory.readBySax(new FileInputStream(readPath), sheet, new ExcelModelListener(i));
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("出异常了!");
System.out.println(e.getMessage());
}
}