java语言读取Excel文件信息

背景:最近项目中有一个表信息过大,需要手动删除,因为信息量比较大手动删除较为麻烦,所以采用使用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.

猜你喜欢

转载自blog.csdn.net/m0_46897923/article/details/114382882