diff --git a/epmet-module/epmet-demo/epmet-demo-server/pom.xml b/epmet-module/epmet-demo/epmet-demo-server/pom.xml index 00a03e4aab..8ef89773a9 100644 --- a/epmet-module/epmet-demo/epmet-demo-server/pom.xml +++ b/epmet-module/epmet-demo/epmet-demo-server/pom.xml @@ -13,6 +13,11 @@ jar + + com.alibaba + easyexcel + 2.2.6 + com.epmet epmet-commons-tools diff --git a/epmet-module/epmet-demo/epmet-demo-server/src/main/java/com/epmet/utils/ExcelPaseTest.java b/epmet-module/epmet-demo/epmet-demo-server/src/main/java/com/epmet/utils/ExcelPaseTest.java new file mode 100644 index 0000000000..6b277bd0d7 --- /dev/null +++ b/epmet-module/epmet-demo/epmet-demo-server/src/main/java/com/epmet/utils/ExcelPaseTest.java @@ -0,0 +1,58 @@ +package com.epmet.utils; + +import com.alibaba.excel.EasyExcelFactory; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @description excel解析 + * + * @return + * @author wxz + * @date 2021.10.28 13:36:26 + */ +public class ExcelPaseTest { + + public static void main(String[] args) { + new ExcelPaseTest().sqlizeGridNameAndCodeFromExcel(); + } + + /** + * @description 读取excel,生成根据网格name更新网格code的sql + * + * @param + * @return + * @author wxz + * @date 2021.10.28 13:34:31 + */ + public void sqlizeGridNameAndCodeFromExcel() { + TempDynamicEasyExcelListener readListener = new TempDynamicEasyExcelListener(); + EasyExcelFactory.read(new File("/Users/wangxianzhang/Documents/1027平阴县网格编码及人员统计表.xls"), IndexOrNameData.class, readListener).headRowNumber(4).sheet(0).doRead(); + List> headList = readListener.getHeadList(); + List dataList = readListener.getDataList(); + + List exceptList = new ArrayList<>(); + + for (IndexOrNameData data : dataList) { + String content = data.getColumn(); + + int startIndex = content.indexOf("370"); + if (startIndex == -1) { + exceptList.add(content); + } else { + String gridName = content.substring(0, startIndex).trim(); + String gridCode = content.substring(startIndex); + String sqlPattern = String.format("update customer_grid set CODE='%s' where GRID_NAME='%s';", gridCode, gridName); + System.out.println(sqlPattern); + } + } + + System.err.println("========异常行======="); + for (String s : exceptList) { + System.err.println(s); + } + } +} diff --git a/epmet-module/epmet-demo/epmet-demo-server/src/main/java/com/epmet/utils/IndexOrNameData.java b/epmet-module/epmet-demo/epmet-demo-server/src/main/java/com/epmet/utils/IndexOrNameData.java new file mode 100644 index 0000000000..920b9e66b5 --- /dev/null +++ b/epmet-module/epmet-demo/epmet-demo-server/src/main/java/com/epmet/utils/IndexOrNameData.java @@ -0,0 +1,20 @@ +package com.epmet.utils; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +@Data +public class IndexOrNameData { + /** + * 强制读取第三个 这里不建议 index 和 name 同时用,要么一个对象只用index,要么一个对象只用name去匹配 + */ + @ExcelProperty(index = 3) + private String column; + ///** + // * 用名字去匹配,这里需要注意,如果名字重复,会导致只有一个字段读取到数据 + // */ + //@ExcelProperty("字符串标题") + //private String string; + //@ExcelProperty("日期标题") + //private Date date; +} \ No newline at end of file diff --git a/epmet-module/epmet-demo/epmet-demo-server/src/main/java/com/epmet/utils/TempDynamicEasyExcelListener.java b/epmet-module/epmet-demo/epmet-demo-server/src/main/java/com/epmet/utils/TempDynamicEasyExcelListener.java new file mode 100644 index 0000000000..cc870c58cc --- /dev/null +++ b/epmet-module/epmet-demo/epmet-demo-server/src/main/java/com/epmet/utils/TempDynamicEasyExcelListener.java @@ -0,0 +1,82 @@ +package com.epmet.utils; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 创建一个监听器 + */ +@Slf4j +public class TempDynamicEasyExcelListener extends AnalysisEventListener { + + /** + * 表头数据(存储所有的表头数据) + */ + private List> headList = new ArrayList<>(); + + /** + * 数据体 + */ + private List dataList = new ArrayList<>(); + + /** + * 这里会一行行的返回头 + * + * @param headMap + * @param context + */ + //@Override + //public void invokeHeadMap(IcResiUserController.IndexOrNameData headMap, AnalysisContext context) { + // log.info("解析到一条头数据:{}", JSON.toJSONString(headMap)); + // //存储全部表头数据 + // headList.add(headMap); + //} + + + @Override + public void invokeHeadMap(Map headMap, AnalysisContext context) { + log.info("解析到一条头数据:{}", JSON.toJSONString(headMap)); + //存储全部表头数据 + headList.add(headMap); + } + + /** + * 这个每一条数据解析都会来调用 + * + * @param data + * one row value. Is is same as {@link AnalysisContext#readRowHolder()} + * @param context + */ + @Override + public void invoke(IndexOrNameData data, AnalysisContext context) { + //log.info("解析到一条数据:{}", JSON.toJSONString(data)); + if (data.getColumn() != null) { + dataList.add(data); + } + } + + /** + * 所有数据解析完成了 都会来调用 + * + * @param context + */ + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + // 这里也要保存数据,确保最后遗留的数据也存储到数据库 + log.info("所有数据解析完成!"); + } + + public List> getHeadList() { + return headList; + } + + public List getDataList() { + return dataList; + } +} \ No newline at end of file