4 changed files with 165 additions and 0 deletions
@ -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); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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;
|
||||
|
} |
@ -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…
Reference in new issue