本项目灵感来源于统计青年大学习观看人数。
- 需要创建Maven项目,导入以下依赖
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
- 下列方法用于读取Excel表格的指定列,返回ArrayList集合
/**
* @Description: 用于将Excel表格指定列的数据放入ArrayList中
* @Param: [file(指定的Excel文件), index(指定的列从0开始)]
* @return: java.util.ArrayList<java.lang.String>
* @Author: 编程怪
* @Date: 2021
*/
public static ArrayList<String> readColumn(File file, int index) throws Exception {
ArrayList<String> res = new ArrayList<>();
InputStream inputStream = new FileInputStream(file.getAbsoluteFile());
//创建一个workbook,在里面执行读取操作
Workbook workbook = Workbook.getWorkbook(inputStream);
//获得第一个工作表对象,0表示第一个
Sheet sheet = workbook.getSheet(0);
//得到所有的行数
int rows = sheet.getRows();
//得到所有的列数
int columns = sheet.getColumns();
Cell cell;
for (int i = 0; i < rows; i++) {
//sheet.getCell(index,i)是这个表里第index+1列第i+1行的单元格
cell = sheet.getCell(index, i);
//cell.getContents()指取出单元格内的值
res.add(cell.getContents());
}
workbook.close();
return res;
}
- 下列方法用于接收需要比较的两个Excel表格的对应列进行比较,调用了2中的方法
/**
* @Description: 用于接收需要比较的两个Excel表格的对应列进行比较
* @Param: [f1(指定的Excel名单文件), i1(指定的列从0开始), f2(指定的Excel签到文件), i2(指定的列从0开始)]
* @return: void
* @Author: 编程怪
* @Date: 2021
*/
public void compare(File f1,Integer i1,File f2,Integer i2){
ImportExcel excel = new ImportExcel();
try {
//名单文件
ArrayList<String> list1 = excel.readColumn(f1, i1);
//签到文件
ArrayList<String> list2 = excel.readColumn(f2, i2);
for (String s:list2){
if (s!="" && s!=null){
for (int i=0;i< list1.size();i++){
if (s.equals(list1.get(i))){
list1.remove(i);
break;
}
}
}
}
System.out.println(list1);
} catch (Exception e) {
e.printStackTrace();
}
}
- 测试的Excel表格数据
f1:
f2:
- 测试结果
需要注意的几点:
1.Excel文件需要xls为结尾的,xlsx的不行。可将xlsx另存为xls的文件即可,重命名不行!
2.f1是主名单也就是所有人的名单,f2是签到名单
3.传入的index参数的0对应的是表格中的第一列
使用中有任何问题请在评论区留言。