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