@Data
public class ExeclDto {
/**
* execl表
*/
private String filename;
/**
* 需要匹配的工作表名
*/
private String name1;
/**
* 需要匹配的工作表名
*/
private String name2;
}

@SpringBootTest
@Slf4j
class CmmcysApplicationTests { @Test
public void testReadExcel() throws IOException, InvalidFormatException {
// 读取的excel文件路径
String filename = "src/main/resources/static/xlsx/车型名称映射.xlsx";
String filename_new = "src/main/resources/static/xlsx/结果表.xlsx";
// 判断filename是否为空
if (!StringUtils.isEmpty(filename)) {
//读取excel
ExeclDto execlDto = new ExeclDto();
execlDto.setFilename(filename);
execlDto.setName1("A");
execlDto.setName2("B");
Map<String, String> map = readExcel(execlDto);
//如果map非空就写入
if (!map.isEmpty()) {
List list = new ArrayList<>();
for (Map.Entry<String, String> entry : map.entrySet()) {
CarDto carDto = new CarDto();
carDto.setName_a(entry.getKey());
carDto.setName_b(entry.getValue());
list.add(carDto);
log.info(entry.getKey() + " ;" + entry.getValue());
}
EasyExcel.write(filename_new, CarDto.class).sheet("结果表").doWrite(list);
}else {
System.out.println("文件没有该工作表,请重新检查上传");
}
} else {
System.out.println("文件为空,请重新上传");
}
} public Map<String,String> readExcel(ExeclDto execlDto){
// 读取的excel文件路径
String filename = execlDto.getFilename();
// 读取excel
File file = new File(filename);
Workbook sheets = null;
try {
sheets = WorkbookFactory.create(file);
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
}
Sheet sheetAt1 = sheets.getSheet(execlDto.getName1());
Sheet sheetAt2 = sheets.getSheet(execlDto.getName2());
//判断excel表中是否有该工作表
if (sheetAt1 !=null && sheetAt2 !=null) {
//采用LinkedHashMap保证数据的顺序性
Map<String, Double> map1 = new LinkedHashMap<>();
Map<String, String> map2 = new LinkedHashMap<>();
//循环工作表行
for (Row row1 : sheetAt1) {
//获取工作表列值
String stringCellValue = row1.getCell(0).getStringCellValue();
//设置string类型初始阈值
map1.put("bz", 0.0);
//循环需要比较的工作表列值
for (Row row2 : sheetAt2) {
//获取工作表列值
String stringCellValue1 = row2.getCell(0).getStringCellValue();
//判断车辆款式,获取字符串位置
if (stringCellValue.contains("款") && stringCellValue1.contains("款")) {
int i = stringCellValue.indexOf("款");
int b = stringCellValue1.indexOf("款");
//进行款式截取并比较款式是否一致
if (stringCellValue.substring(i - 4, i).equals(stringCellValue1.substring(b - 4, b))) {
//采用String里面的方法进行相似度取值
double similarity = StringUtils.getJaroWinklerDistance(stringCellValue, stringCellValue1);
//进行相似度比较
if (similarity > map1.get("bz")) {
//相似度高的替换低的
map1.put("bz", similarity);
//存放进map集合
map2.put(stringCellValue, stringCellValue1);
}
}
}
}
}
return map2;
}else {
return null;
}
}
}

使用EasyExcel对excel数据进行相似度判断的更多相关文章

  1. 使用 EasyExcel 写Excel数据(表头动态)

    引入 jar 包 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel&l ...

  2. 将Excel数据导入mysql数据库的几种方法

    将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面 ...

  3. easyExcel导出excel的简单使用

    easyExcel导出excel的简单使用 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定 ...

  4. Python利用pandas处理Excel数据的应用

    Python利用pandas处理Excel数据的应用   最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在做 ...

  5. springboot批量导入excel数据

    1 背景 小白今天闲着没事,在公司摸鱼,以为今天有事无聊的一天,突然上头说小子,今天实现一下批量导入Excel数据吧,当时我的内心是拒绝的,然后默默打开idea. 2 介绍 2.1 框架 java本身 ...

  6. SpringBoot整合easyexcel实现Excel的导入与导出

    导出 在一般不管大的或者小的系统中,各家的产品都一样,闲的无聊的时候都喜欢让我们这些程序员导出一些数据出来供他观赏,非说这是必须需求,非做不可,那么我们就只能苦逼的哼哧哼哧的写bug喽. 之前使用PO ...

  7. JAVA使用easyexcel操作Excel

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.                                               本 ...

  8. SpringBoot整合Easyexcel操作Excel,闲暇之余,让我们学习更多

    关于封面:晚饭后回自习室的路上 Easyexcel 官方文档 Easyexcel | github 前言 最近也是在写的一个小练习中,需要用到这个.趁着这次就将写个整合的Demo给大家. 希望能够让大 ...

  9. 基于EasyExcel的大数据量导入并去重

    源码:https://gitee.com/antia11/excel-data-import-demo 背景:客户需要每周会将上传一个 Excel 数据文件,数据量单次为 20W 以上,作为其他模块和 ...

  10. java的poi技术读取Excel数据到MySQL

    这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 ...

随机推荐

  1. ChatGPT搭建AI网站实战

    1.概述 ChatGPT是一款基于GPT-3.5架构的大型语言模型,它能够进行自然语言处理和生成对话等任务.作为一款智能化的聊天机器人,ChatGPT有着广泛的应用场景,如在线客服.智能助手.个性化推 ...

  2. vue路由加载页面

    当vue路由切换时,有时候会出现短暂白屏,需要添加一个加载状态 参考:buildadmin 地址:https://demo.buildadmin.com/#/ 利用vue的路由导航守卫:beforeE ...

  3. R语言文本数据挖掘(二)

    tm文本挖掘示例 文本挖掘是从非结构化的文本信息中抽取潜在的.用户感兴趣的重要模式或知识的过程,可以把它看作数据挖掘或数据库中知识发现的延伸.对文本信息的挖掘主要是以数理统计学和计算语言学为理论基础, ...

  4. 运输问题和指派问题—R实现

    运输问题和指派问题 运输问题经常出现在计划货物配送和从某些供给地区到达需求地区之间的服务中,特别是每个供给地区(起点)的货物可获得量是有限的,每个需求地区(目的地)的货物需求量是已知的.运输问题中最常 ...

  5. [Linux/Bash/Shell]curl & wget

    1 参考文献 curl 的用法指南 - 阮一峰 curl网站开发指南 - 阮一峰 Curl Cookbook https://curl.haxx.se/ linux curl 命令详解,以及实例 2 ...

  6. [MyBatis]MyBatis系列:模糊查询的4种实现方式【待完善】

    背景 客户现网遇到的1个子问题. 方案 LIKE + Concat(strA, strB) ... 参考文献 MyBatis系列:模糊查询的4种实现方式

  7. 【观察者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    简介 观察者模式(Observer Pattern)是一种行为型模式.它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 观察者模式使用三个类S ...

  8. java处理集合工具

    public static <K, V> Map<K, V> parseListToMap(Collection<V> list, Function<V, K ...

  9. 全网最硬核 JVM 内存解析 - 1.从 Native Memory Tracking 说起

    个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...

  10. 深度学习-05(tensorflow模型保存与加载、文件读取、图像分类:手写体识别、服饰识别)

    文章目录 深度学习-05 模型保存于加载 什么是模型保存与加载 模型保存于加载API 案例1:模型保存/加载 读取数据 文件读取机制 文件读取API 案例2:CSV文件读取 图片文件读取API 案例3 ...