首页 > 其他分享 >使用EasyExcel对excel数据进行相似度判断

使用EasyExcel对excel数据进行相似度判断

时间:2023-06-20 20:12:49浏览次数:38  
标签:String EasyExcel excel filename 相似 execlDto new stringCellValue



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

 

 

标签:String,EasyExcel,excel,filename,相似,execlDto,new,stringCellValue
From: https://www.cnblogs.com/kxxz/p/17493823.html

相关文章

  • 解决Excel 互操作错误"检索COML类工厂中 CLSID为 {00024500-0000-0000-C000-000000000
    解决Excel互操作错误"检索COML类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误:80070005"\comexp.msc-32......
  • excel2016选中单元格怎么高亮显示选中的行和列
    excel2016怎么高亮显示选中的行和列第一步:首先我们在电脑上用excel2016打开要编辑的表格,然后选中要整个表格的数据区域第二步:接下来依次点击开始工具栏上的“条件格式/新建规则”菜单项。接着在打开的新建格式规则的窗口中,我们选中“使用公式确定要设......
  • 记录--前端实现文件预览(pdf、excel、word、图片)
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前端实现文件预览功能需求:实现一个在线预览pdf、excel、word、图片等文件的功能。介绍:支持pdf、xlsx、docx、jpg、png、jpeg。以下使用Vue3代码实现所有功能,建议以下的预览文件标签可以在外层包裹一层弹窗。......
  • 后台导出excel报错,java.io.IOException:Permission denied
    java使用poi导出excel,会创建并使用一个临时文件夹这个问题的原因就是临时文件夹的操作权限不够,使用chown修改文件夹权限即可。linux中临时目录是/tmp/poifileswindow是在AppData\Local\Temp\poifiles......
  • excel导入时,对两种版本格式的支持
    InputStreamfis=file.getInputStream();Workbookwookbook=null;Stringfilename=file.getOriginalFilename();filename=filename.trim();filename=filename.substring(0,filename.lastIndexOf("."));......
  • Excel表格不改变格式下修改时间
    Excel表格在不改变格式的情况下,修改时间现象Excel表格有些时候在人工登记时难免出错,例如:写错时间或增加了其他字符出现了错误数据修改如果直接把'?'换成数字,则会出现,格式改变的情况如果是这样,会影响后续的处理。正确的修改方式要在前面加上分号'再看,格式就和其他的数据......
  • 查询和键之间的相似度
    查询和键的联合嵌入空间查询和键的联合嵌入空间是指在注意力机制中,将查询(Q)和键(K)映射到相同的嵌入空间,以便计算它们之间的相似度或相关性。在注意力机制中,我们使用查询向量(Q)来表示我们要关注的内容或信息,而键向量(K)表示我们要对其进行关注的内容或信息。通过将查询和键映射到相同的......
  • 不同相似度计算方法的特点和优缺点
    相似度计算方法有很多种,以下是一些常用的算法:1.余弦相似度(CosineSimilarity):用于计算向量之间的相似度,常用于文本数据的相似度计算。它通过计算两个向量之间的夹角余弦值来衡量它们的相似程度,取值范围为[-1,1],值越接近1表示越相似。2.欧氏距离(EuclideanDistance):用于计算向量......
  • excel新手入门
    没办法,实习需要excel。来叨一些快捷键和容易错的东西只粘贴数值ctrl+alt+v切换窗口:alt+tab用excel“爬”数据(操作太sao)3000行左右,数据干净都能做人肉复制,批量粘贴到记事本,然后用word处理换行符,然后在整理成一行一段的格式,然后放到excel里做分列和一些具体的删减替换(可以只......
  • excel一个sheet拆分成几个文件
    #-*-coding:utf8-*-importpandasaspdfile_name='查询银行汇总_20w.xlsx'file_name_prefix=file_name.split('.')[0]df=pd.DataFrame(pd.read_excel(file_name))#每个文件的行数file_num=35000#共分成多少个文件sheet_num=float(df.shape[0]/fi......