最近由于项目的需要,要求判断给定的Excle中某一列值,看其是否有重复,如果有重复显示重复字段名字以及都是在那些行重复了。下面直接给出代码,让大家做下参考。如有问题我们一起讨论~需要用到poi3.8插件,请自行下载

/**

* 判定Excel中某列是否有重复数据

* @param file 读取数据的源Excel

* @param ignoreRows 读取数据忽略的行数,比如行头不需要读入 忽略的行数为1

* @param column 需要判定的字段所在列的位置,比如需要判定的字段在第三列, column=2;注意,0是算第一列

* @return 读出的Excel中数据的内容

* @throws FileNotFoundException

* @throws IOException

*/

public boolean judgeRepeatExcle(File file, int column,int ignoreRows){

boolean flag=false;

if(column>=0&&file.exists()){

/*实现excle的兼容读取*/

Workbook wb = null;

try {

wb = new XSSFWorkbook(new FileInputStream(file));

} catch (Exception ex) {

try {

wb= new HSSFWorkbook(new POIFSFileSystem(new BufferedInputStream(new FileInputStream(file))));

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} //兼容读取设置结束

Cell cell = null;

System.out.println("本Excel总共有"+wb.getNumberOfSheets()+" 个Sheet 。");

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

HashMap map=new HashMap();

HashMap tmap=new HashMap();

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行

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

String value ="";//保存i行的第column列的值

if (cell != null) {

switch (cell.getCellType()) {

case HSSFCell.CELL_TYPE_STRING:

value = cell.getStringCellValue();

break;

case HSSFCell.CELL_TYPE_NUMERIC:

if (HSSFDateUtil.isCellDateFormatted(cell)) {

Date date = cell.getDateCellValue();

if (date != null) {

value = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date);

} else {

value = "";

}

} else {

value = new DecimalFormat("0").format(cell.getNumericCellValue());

}

break;

case HSSFCell.CELL_TYPE_FORMULA:

// 导入时如果为公式生成的数据则无值

if (!cell.getStringCellValue().equals("")) {

value = cell.getStringCellValue();

} else {

value = cell.getNumericCellValue() + "";

}

break;

case HSSFCell.CELL_TYPE_BLANK:

break;

case HSSFCell.CELL_TYPE_ERROR:

value = "";

break;

case HSSFCell.CELL_TYPE_BOOLEAN:

value = (cell.getBooleanCellValue() == true ? "Y": "N");

break;

default:

value = "";

}

}

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

*/

int newNum=i+1;

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

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

//System.out.println("先前保存的行号value="+value+" lineNum="+lineNum);

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();

System.out.println("本Excel总共有"+wb.getNumberOfSheets()+" 个Sheet,第 "+(sheetIndex+1)+" 个Sheet中:");

while(it.hasNext()){

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

System.out.println("字段:"+entry.getKey()+" "+entry.getValue());

}

flag=true;

}

return flag;

}

return flag;

}

public static void main( String arg[]){

ExcelOperate eo=new ExcelOperate();

File file=new File("D:\\11.xls");

System.out.println("asfsaf " +eo.judgeRepeatExcle(file, 0, 1));

}

java excel 判断组重复_Java判断Excel某列是否有重复值相关推荐

  1. excel中使用countif函数,计算一列数据的重复内容个数

    excel中使用countif函数,计算一列数据的重复内容个数 平常,在统计数据时,需要知道excel表格中某一列数据的每个内容的具体个数有多少,虽然可以通过写代码解决,但是对于没有代码基础的人来说有 ...

  2. java 判断图片格式_Java判断上传图片格式的实例代码

    先给大家介绍下java判断上传图片格式. 由于客户上传图片将png的图片的后缀名改为jpg,所以通过后缀名判断不行,用下面这个方法可以 //判断是否是JPG格式 log.info("-1-- ...

  3. java excel 多sheet页_java导入excel操作多sheet页上传

    依赖包 cn.afterturn easypoi-base 3.0.1 cn.afterturn easypoi-web 3.0.1 cn.afterturn easypoi-annotation 3 ...

  4. java判断总共天数_java判断两个时间相差得天数

    方法一:通过Calendar类得日期比较,在这需要考虑闰年和平年,也要考虑跨年份 /** * date2比date1多的天数 * @param date1 * @param date2 * @retu ...

  5. java筛选表格,java怎么获取excel中的数据_java筛选excel数据

    你好! 请教你个问题 java web程序如何将读取的excel表格里的数据插入到数据库,并显示在JSP页面上? 主要用poi.jar 包.包含两jar就可以了:poi-3.16.jar.poi-oo ...

  6. java重命名sheet失败_java jxl excel 数据导出 重新命名无效的工作表名称 | 学步园...

    今天在java中使用jxl导出数据到excel工作表的时候,无论是在线直接打开还是保存到本地再打开,都会提示下面的错误信息: "Excel在'excel.xls'中发现不可读取的内容.是否恢 ...

  7. java导出excel合并单元格_Java 导出Excel 合并Excel单元格

    /** * 导出Excel表格 * * @param allList  要导出的数据 * @param headArr  json键值对 * @param titleArr excel标题 * @pa ...

  8. java判断list相等_java 判断两个list是否相等

    /** * 队列比较 * @param * @param a * @param b * @return */ public static > boolean compare(List a, Li ...

  9. java 判断是不是图片_java判断是否是图片

    java判断是否是图片的方法: 1.通过判断文件后缀名判断是否是图片String extension = ""; int i = fileName.lastIndexOf('.') ...

最新文章

  1. a10双核(8dm1)-android4.1.1-v2.07,台电官方论坛 - A10 双核 8DM1 2G ROM 4.0.4 固件 - 平板笔记本...
  2. “新浪朋友”首先要满足朋友需求
  3. PHP 页面编码声明方法详解(header或meta)
  4. android 扫描音乐,native.js扫描android手机本地音乐
  5. 音视频开发基础概述 - PCM、YUV、H264、常用软件介绍
  6. 公钥密码--Elgamal
  7. 《Objective-c》-(内存管理之三:@property的内存管理)
  8. CSS3.0_选择器_学习笔记
  9. 如何将React App转换为React Native
  10. 浪潮n系列服务器指示灯_【科恩电气】通用薄型区域传感器 NA2N系列
  11. 【Docker】Docer安装MySQL 8 并且远程登录
  12. 业绩上不去,老板和业务员都有责任,但首先要划分清楚责任
  13. Java 技术体系(JDK 与 JRE 的关系)、POJO 与 JavaBeans
  14. tns无监听程序_成ORA-12560: TNS: 协议适配器错误的问题的原因
  15. Android移动开发基础案例教程 第2章 Android UI开发
  16. revit2016与2017区别_Revit2016版与Revit2018版的区别?
  17. CCRC和ISO27001有什么区别?
  18. OPNET出错集锦:)
  19. 基于Xilinx的FPGA下载配置详解及几种电路参考设计
  20. 任意模数ntt_再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT)...

热门文章

  1. GO 常见环境变量与常用命令
  2. 双曲三角函数图像及计算
  3. 016.从中序与后序遍历序列构造二叉树
  4. 深度剖析 | SN 可微分学习的自适配归一化 (Switchable Normalization)
  5. MQTT-SN协议阅读之MQTT-SN vs MQTT
  6. 【每日一题】把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5]
  7. 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组
  8. 全新 Amazon RDS for MySQL 和 PostgreSQL 多可用区 (Multi-AZ) 部署选项
  9. GNS3 v0.8.6简体中文官方版本下载
  10. python随机生成二维列表_对python产生随机的二维数组实例详解