Browse Source

增加解析excel的临时工具:ExcelPaseTest

dev_shibei_match
wangxianzhang 4 years ago
parent
commit
aed6962927
  1. 5
      epmet-module/epmet-demo/epmet-demo-server/pom.xml
  2. 58
      epmet-module/epmet-demo/epmet-demo-server/src/main/java/com/epmet/utils/ExcelPaseTest.java
  3. 20
      epmet-module/epmet-demo/epmet-demo-server/src/main/java/com/epmet/utils/IndexOrNameData.java
  4. 82
      epmet-module/epmet-demo/epmet-demo-server/src/main/java/com/epmet/utils/TempDynamicEasyExcelListener.java

5
epmet-module/epmet-demo/epmet-demo-server/pom.xml

@ -13,6 +13,11 @@
<packaging>jar</packaging> <packaging>jar</packaging>
<dependencies> <dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
<dependency> <dependency>
<groupId>com.epmet</groupId> <groupId>com.epmet</groupId>
<artifactId>epmet-commons-tools</artifactId> <artifactId>epmet-commons-tools</artifactId>

58
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<Map<Integer, String>> headList = readListener.getHeadList();
List<IndexOrNameData> dataList = readListener.getDataList();
List<String> 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);
}
}
}

20
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;
}

82
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<IndexOrNameData> {
/**
* 表头数据存储所有的表头数据
*/
private List<Map<Integer, String>> headList = new ArrayList<>();
/**
* 数据体
*/
private List<IndexOrNameData> 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<Integer, String> 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<Map<Integer, String>> getHeadList() {
return headList;
}
public List<IndexOrNameData> getDataList() {
return dataList;
}
}
Loading…
Cancel
Save