Java操作xls文件,数据去重

Java操作xls文件,数据去重


前言

根据 表格数据的某一列唯一值生成key,将要进行数据合并列的值作value进行value值得去重合并
用到Map,poi jar包,输入输出流(io流)

一、读取磁盘文件,进行数据去重处理

public void excel() throws Exception {
        //用流的方式先读取到你想要的excel的文件
        FileInputStream fis=new FileInputStream(new File("D:\\ww.xls"));
        //解析excel
        POIFSFileSystem pSystem=new POIFSFileSystem(fis);
        //获取整个excel
        HSSFWorkbook hb=new HSSFWorkbook(pSystem);
        System.out.println(hb.getNumCellStyles());
        //获取第一个表单sheet
        HSSFSheet sheet=hb.getSheetAt(0);
        //循环行数依次获取列数
        Map<String, String> map = new HashMap<>();
        for (int i = sheet.getFirstRowNum()+1; i < sheet.getLastRowNum()+1; i++) {
            //获取哪一行i
            Row row=sheet.getRow(i);
            if (row!=null) {
                //创建一个集合,用处将每一行的每一列数据都存入集合中
                Cell cell0=row.getCell(0); //这里我以第一列为key
                String key = cell0.getStringCellValue();
                Cell cell5=row.getCell(5);//这里我以第二列为value
                String value = cell5.getStringCellValue();
                if(map.get(key) == null){
                    map.put(key,value);
                }else{
                    String s = map.get(key);
                    String valueNew = s+","+ value;//以逗号拼接value
                    map.put(key,valueNew);
                }
            }
        }
        fis.close();
        System.out.println(map);
        for (Map.Entry<String, String> stringStringEntry : map.entrySet()) {
            List<String> list = new ArrayList<>();
            String value = stringStringEntry.getValue();
            String[] split = value.split(",");
            for (String s : split) {
                if (!list.contains(s)){
                    list.add(s);
                }
            }
            String join = StringUtils.join(list, ",");
            stringStringEntry.setValue(join);
        }
        System.out.println(map);
        sss(map);//输出文件
    }

二、将合并的数据写入到源文件建中

代码如下(示例):

public void sss(Map<String, String> map) throws Exception {
		//对一个文件的读写,一定要注意是否有其他的进程在读写改文件,不然会写操作失败
        FileInputStream fis=new FileInputStream(new File("D:\\ww.xls"));
        //解析excel
        POIFSFileSystem pSystem=new POIFSFileSystem(fis);
        //获取整个excel
        HSSFWorkbook hb=new HSSFWorkbook(pSystem);
        System.out.println(hb.getNumCellStyles());
        //获取第一个表单sheet
        HSSFSheet sheet=hb.getSheetAt(0);
        //循环行数依次获取列数
        for (int i = sheet.getFirstRowNum()+1; i < sheet.getLastRowNum()+1; i++) {
            //获取哪一行i
            Row row = sheet.getRow(i);
            if (row!=null) {
                //创建一个集合,用处将每一行的每一列数据都存入集合中
                Cell cell0=row.getCell(0);
                String key = cell0.getStringCellValue();
                if(map.get(key) != null){
                    String s = map.get(key);
                    Cell cell5=row.createCell(5);
                    cell5.setCellValue(s);
                }
            }
        }
        fis.close();
        FileOutputStream outPutStream=new FileOutputStream(new File("D:\\ww.xls"));
        hb.write(outPutStream);//利用io流更改写入新数据
        outPutStream.flush();
        outPutStream.close();
    }

总结

主要是理解poi jar包中对表格数据进行封装的个个对象,表格,行,列,单元格相关对象的一个操作。粗陋理解,还望大家指正和补充。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值