poi判断重复列

/**

 * @Title: judgeRepeatExcle

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

 * @param wb

 * @param column

 * @param ignoreRows

 * @param errorList

 * @return    设定文件

 * List    返回类型

 * @throws

 */ 

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

if(column>=0){

Cell cell = null;

HashMap map=new HashMap();

HashMap tmap=new HashMap();

 

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> it=tmap.entrySet().iterator();

        while(it.hasNext()){

Map.Entry entry = (Map.Entry) it.next();

         ErrorBean eb = new ErrorBean();

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

errorList.add(eb);

        }

}

return errorList;

}

你可能感兴趣的:(Java,poi)