背景:最近项目中有一个表信息过大,需要手动删除,因为信息量比较大手动删除较为麻烦,所以采用使用excel读取数据的方式,然后操作数据库删除数据,其实只要是想要从Excel中获取信息都可以使用这种方式进行操作Excel,代码很简单。
1.第一步:导入需要的jar包
这里使用的是net.sourceforge.jexcelapi:jxl-2.6.12.jar,需要特殊注意的是这里不支持2003版本以上的Excel,因为这个jar包在2011年以后就没有新版本更新了,只支持到了Excel2003,所以想操作最新版本的Excel是不行的,2003版的Excel文件后缀是xls。虽然只支持到了Excel2003,但是功能实现的很好,操作简单,使用方便。
下面是pom文件中引入的pom包
<dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.6.12</version> </dependency>
2.第二步:选择依赖库(如果已经配置了,就不用改了)
<mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/repositories/central/</url> </mirror>
3.第三步:实现代码
public ResultDTO dealExcelToDb(File file) { Workbook workbook = null; try { //转化文件对象 workbook = Workbook.getWorkbook(file); //获取第一个sheet Sheet sheet = workbook.getSheet(0); //获取行数 log.info("该Excel存在" + (sheet.getRows() - 1) + "行 "); //获取列数 log.info("该Excel存在" + sheet.getColumns() + "列 "); log.info("每次处理500条,共需处理" + (sheet.getRows() / 500 + (sheet.getRows() % 500 > 0 ? 1 : 0)) + "次 "); int num = 0;//处理批次 int allRows = 0;//处理的总条数 int batchRows = 0;//每次处理的次数 StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < sheet.getRows(); i++) { if (i > 0) { allRows++; } for (int j = 0; j < sheet.getColumns(); j++) { //第一行为字段名,oid,不处理 if (i > 0 && i< sheet.getRows()) { batchRows++; //获取第i行,第j列的单元格的值 stringBuilder.append(sheet.getCell(j, i).getContents()); stringBuilder.append(","); } else { break; } } //数据达到500条处理一次或者到达文件末尾 if (batchRows == 500 || allRows == sheet.getRows() - 1) { log.info("第" + (++num) + "批次数据开始处理"); //开始调用批处理程序 Map<String,String> map = new HashMap(); map.put("jsonParams",stringBuilder.toString().substring(0,stringBuilder.lastIndexOf(","))); map.put("tableName","supplier_settled_synchronization_data_log "); String result = HttpClientUtil.sendPostDataByMap("http://www.baidu.com", map, CommonConstant.ENCODING); log.info("调用中台处理结果:" + result.toString()); batchRows = 0;//清空处理条数,下次循环重新计数 log.info("第" + num + "批次数据结束处理"); } } } catch (IOException e) { e.printStackTrace(); } catch (BiffException e) { log.info("文件解析出错,请使用1997-2003版本Excel文件"); e.printStackTrace(); } finally { if (workbook != null) { workbook.close(); } } return new ResultDTO(ExceptionEnum.COMMON_SUCCESS_30.getResultCode(), null, "数据导入成功!"); }
从上方代码可以看出操作十分的简便(大部分都是我自己的处理代码),先将文件转化为workbook,然后获取sheet页,然后就可以获取行,获取列,也可以获取单元格数据了,这样就拿到了Excel中的数据,唯一遗憾的是这个jar没有人更新了,只支持到了Excel2003.