java excel 判断组重复_Java判断Excel某列是否有重复值
最近由于项目的需要,要求判断给定的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某列是否有重复值相关推荐
- excel中使用countif函数,计算一列数据的重复内容个数
excel中使用countif函数,计算一列数据的重复内容个数 平常,在统计数据时,需要知道excel表格中某一列数据的每个内容的具体个数有多少,虽然可以通过写代码解决,但是对于没有代码基础的人来说有 ...
- java 判断图片格式_Java判断上传图片格式的实例代码
先给大家介绍下java判断上传图片格式. 由于客户上传图片将png的图片的后缀名改为jpg,所以通过后缀名判断不行,用下面这个方法可以 //判断是否是JPG格式 log.info("-1-- ...
- 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 ...
- java判断总共天数_java判断两个时间相差得天数
方法一:通过Calendar类得日期比较,在这需要考虑闰年和平年,也要考虑跨年份 /** * date2比date1多的天数 * @param date1 * @param date2 * @retu ...
- java筛选表格,java怎么获取excel中的数据_java筛选excel数据
你好! 请教你个问题 java web程序如何将读取的excel表格里的数据插入到数据库,并显示在JSP页面上? 主要用poi.jar 包.包含两jar就可以了:poi-3.16.jar.poi-oo ...
- java重命名sheet失败_java jxl excel 数据导出 重新命名无效的工作表名称 | 学步园...
今天在java中使用jxl导出数据到excel工作表的时候,无论是在线直接打开还是保存到本地再打开,都会提示下面的错误信息: "Excel在'excel.xls'中发现不可读取的内容.是否恢 ...
- java导出excel合并单元格_Java 导出Excel 合并Excel单元格
/** * 导出Excel表格 * * @param allList 要导出的数据 * @param headArr json键值对 * @param titleArr excel标题 * @pa ...
- java判断list相等_java 判断两个list是否相等
/** * 队列比较 * @param * @param a * @param b * @return */ public static > boolean compare(List a, Li ...
- java 判断是不是图片_java判断是否是图片
java判断是否是图片的方法: 1.通过判断文件后缀名判断是否是图片String extension = ""; int i = fileName.lastIndexOf('.') ...
最新文章
- a10双核(8dm1)-android4.1.1-v2.07,台电官方论坛 - A10 双核 8DM1 2G ROM 4.0.4 固件 - 平板笔记本...
- “新浪朋友”首先要满足朋友需求
- PHP 页面编码声明方法详解(header或meta)
- android 扫描音乐,native.js扫描android手机本地音乐
- 音视频开发基础概述 - PCM、YUV、H264、常用软件介绍
- 公钥密码--Elgamal
- 《Objective-c》-(内存管理之三:@property的内存管理)
- CSS3.0_选择器_学习笔记
- 如何将React App转换为React Native
- 浪潮n系列服务器指示灯_【科恩电气】通用薄型区域传感器 NA2N系列
- 【Docker】Docer安装MySQL 8 并且远程登录
- 业绩上不去,老板和业务员都有责任,但首先要划分清楚责任
- Java 技术体系(JDK 与 JRE 的关系)、POJO 与 JavaBeans
- tns无监听程序_成ORA-12560: TNS: 协议适配器错误的问题的原因
- Android移动开发基础案例教程 第2章 Android UI开发
- revit2016与2017区别_Revit2016版与Revit2018版的区别?
- CCRC和ISO27001有什么区别?
- OPNET出错集锦:)
- 基于Xilinx的FPGA下载配置详解及几种电路参考设计
- 任意模数ntt_再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT)...
热门文章
- GO 常见环境变量与常用命令
- 双曲三角函数图像及计算
- 016.从中序与后序遍历序列构造二叉树
- 深度剖析 | SN 可微分学习的自适配归一化 (Switchable Normalization)
- MQTT-SN协议阅读之MQTT-SN vs MQTT
- 【每日一题】把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5]
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组
- 全新 Amazon RDS for MySQL 和 PostgreSQL 多可用区 (Multi-AZ) 部署选项
- GNS3 v0.8.6简体中文官方版本下载
- python随机生成二维列表_对python产生随机的二维数组实例详解