poi判断重复列

3 篇文章 0 订阅

/**

 * @Title: judgeRepeatExcle

 * @Description: TODO(判定Excel中某列是否有重复数据)

 * @param wb

 * @param column

 * @param ignoreRows

 * @param errorList

 * @return    设定文件

 * List<ErrorBean>    返回类型

 * @throws

 */ 

public List<ErrorBean> judgeRepeatExcle(Workbook wb, int column,int ignoreRows,List<ErrorBean> errorList){

if(column>=0){

Cell cell = null;

HashMap<String,String> map=new HashMap<String,String>();

HashMap<String,String> tmap=new HashMap<String,String>();

 

for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {//循环所有的sheet,一个excle中可能有多个sheet

Sheet sheet = wb.getSheetAt(sheetIndex);

        int firstRowNum = sheet.getFirstRowNum();

        int lastRowNum = sheet.getLastRowNum();

        firstRowNum=firstRowNum>ignoreRows?firstRowNum:ignoreRows;

        Row row = null;

        

        for (int i = firstRowNum; i <= lastRowNum; i++) {

         row = sheet.getRow(i);          //取得第i行

         if(row == null){

          break;

         }

         cell = row.getCell(column);        //取得i行的第column列

         String value = cell.toString();//保存i行的第column列的值

        /*在excel中,计数是从0开始的,为了使结果与Excel中显示的行数保持一致,让行数newNum=为(i+1)

         */

int newNum=i+1;

if(map.containsKey(value)){//如果Map集合中包含指定的键名,则返回true;否则返回false。

String lineNum=map.get(value);//拿到先前保存的行号

if(tmap.containsKey(value)){

String str=tmap.get(value);//拿到先前保存的所有行号记录

tmap.put(value, str+" ,"+newNum);//更新后,显示效果:——》行重复:在第 2 ,3 , 5

}else{

tmap.put(value, "重复行数:第  "+lineNum+" ,"+newNum);//最后显示效果:——》行重复:在第 2 ,3

}

 

}

map.put(value, newNum+"");//把i行的第column列的值与行号保存到map中

         }

        

}

 

Iterator<Entry<String, String>> it=tmap.entrySet().iterator();

        while(it.hasNext()){

Map.Entry<String, String> entry = (Map.Entry<String, String>) it.next();

         ErrorBean eb = new ErrorBean();

eb.setMessage("项目编码:"+entry.getKey()+"; "+entry.getValue()+"行;");

errorList.add(eb);

        }

}

return errorList;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值