使用EasyExcel对excel数据进行相似度判断
@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数据进行相似度判断的更多相关文章
- 使用 EasyExcel 写Excel数据(表头动态)
引入 jar 包 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel&l ...
- 将Excel数据导入mysql数据库的几种方法
将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面 ...
- easyExcel导出excel的简单使用
easyExcel导出excel的简单使用 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定 ...
- Python利用pandas处理Excel数据的应用
Python利用pandas处理Excel数据的应用 最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在做 ...
- springboot批量导入excel数据
1 背景 小白今天闲着没事,在公司摸鱼,以为今天有事无聊的一天,突然上头说小子,今天实现一下批量导入Excel数据吧,当时我的内心是拒绝的,然后默默打开idea. 2 介绍 2.1 框架 java本身 ...
- SpringBoot整合easyexcel实现Excel的导入与导出
导出 在一般不管大的或者小的系统中,各家的产品都一样,闲的无聊的时候都喜欢让我们这些程序员导出一些数据出来供他观赏,非说这是必须需求,非做不可,那么我们就只能苦逼的哼哧哼哧的写bug喽. 之前使用PO ...
- JAVA使用easyexcel操作Excel
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本 ...
- SpringBoot整合Easyexcel操作Excel,闲暇之余,让我们学习更多
关于封面:晚饭后回自习室的路上 Easyexcel 官方文档 Easyexcel | github 前言 最近也是在写的一个小练习中,需要用到这个.趁着这次就将写个整合的Demo给大家. 希望能够让大 ...
- 基于EasyExcel的大数据量导入并去重
源码:https://gitee.com/antia11/excel-data-import-demo 背景:客户需要每周会将上传一个 Excel 数据文件,数据量单次为 20W 以上,作为其他模块和 ...
- java的poi技术读取Excel数据到MySQL
这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 ...
随机推荐
- kubernetes(k8s)安装BGP模式calico网络支持IPV4和IPV6
kubernetes(k8s)安装BGP模式calico网络支持IPV4和IPV6 BGP是互联网上一个核心的去中心化自治路由协议,它通过维护IP路由表或"前缀"表来实现自治系统A ...
- Python最详细的Excel操作方式,
为 什么要学会使用Excel在机器学习模型的建立中,不得不借助于Excel强大的统计分析能力,这个时候就牵涉到了如何将python直接处理得到的数据存入excel表格当中以及获取表格的数据进行分析,简 ...
- 四月二十五号java基础知识
1.注意:无论哪个构造方法,在创建文件输入输出流时都可能银给出的文件名不对.路径不对文件的属性不对等,不能打开文件而造成错误,此时系统会抛出FileNotFoundException异常执行read( ...
- Rust中的into函数和from函数
1.Rust中的into函数和from函数是做什么用的? into函数是Rust语言中的一个转换函数,它属于Into trait.它可以将一个类型转换为另一个类型.实现了From trait的类型会自 ...
- day96:flask:flask-migrate&flask-session&蓝图Blueprint&蓝图的运行机制&基于flask仿照django进行项目架构
目录 1.flask-migrate 2.flask-session 3.蓝图:Blueprint 4.蓝图的运行机制 5.基于flask仿照django进行项目架构 1.准备工作 2.加载配置文件 ...
- Cron表达式介绍与示例
1. 概念介绍 Cron表达式是一个具有时间含义的字符串,字符串以5~6个空格隔开,分为6~7个域,格式为X X X X X X X.其中X是一个域的占位符.最后一个代表年份的域非必须,可省略.单 ...
- 3520. 【NOIP2013模拟11.7B组】原根(math)
题目: 考试想法: 考试的时候觉得这些数学公式太恶心了,所以就直接跳过了. 正解: 直接暴力模拟就可以了. 代码: #include<bits/stdc++.h> using namesp ...
- 关于Java中值传递和址传递
参数传递在Java中有两种类型 值和址 其实本质都是一份拷贝 在调用函数的时候 进行压栈 传进来的参数会被开辟一份新的空间 传基本类型是把值传过去 传引用数据类型是实例指向实参 void m(int ...
- AI降临,前端启用面壁计划
作者:京东零售 郑炳懿 开篇: "在我们有生之年,你觉得会看到AI兵临城下的那一天吗?就像电影黑客帝国里面演的一样",Barry从红色的烟盒里取出一根烟发问道. "不可能 ...
- Cesium加载ArcGIS Server4490且orgin -400 400的切片服务
Cesium在使用加载Cesium.ArcGisMapServerImageryProvider加载切片服务时,默认只支持wgs84的4326坐标系,不支持CGCS2000的4490坐标系. 如果是A ...