使用apache poi 实现Excel批量导入

来源:互联网 发布:一号店和淘宝开店 编辑:程序博客网 时间:2024/05/22 00:18

前言

 做客户模块的时候需要用到Excel的批量导入,而当前使用的较多的是apache下的POI,因为微软公司的Excel表格有两种格式,分别是xls和xlsx(区别是后者使用xml来格式话保存的,压缩的更好),本文以xlsx文件格式为例,其实两者都是一样的。

依赖

 两个必须加,因为前一个依赖的xls的,xlsx依赖在后面一个依赖中。

 <dependency>      <groupId>org.apache.poi</groupId>      <artifactId>poi</artifactId>      <version>3.12-beta1</version>    </dependency>    <dependency>      <groupId>org.apache.poi</groupId>      <artifactId>poi-ooxml</artifactId>      <version>3.10-FINAL</version>    </dependency>

核心类

  • XSSFWorkbook 类似于创建一个工作薄
  • XSSFSheet 一个Excel表的内容
  • XSSFRow 表的一行
  • XSSFCell 每行的一个单元

说明:以上就是poi对Excel操作的核心四个类,从这名字就可以看出来其作用了。流程就是使用文件输入流获取Excel文件放入XSSFWorkbook中,再通过方法getNumberOfSheets()获取XSSFSheet个数,继续通过getLastRowNum()获取单元格数量,最后就是getCell()来取值就行了。
核心代码如下:

        //path为xlsx文件路径        InputStream inputStream = new FileInputStream(path);        //add the Workbook        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream);        Member member = null;        User user = null;        List<Member> list = new ArrayList<Member>();        // Read the Sheet        for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {            XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);            if (xssfSheet == null) {                continue;            }            // Read the Row            for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {                XSSFRow xssfRow = xssfSheet.getRow(rowNum);                if (xssfRow != null) {                    member = new Member();                    user = new User();                    XSSFCell name = xssfRow.getCell(0);                    XSSFCell userId = xssfRow.getCell(1);                    XSSFCell statusId = xssfRow.getCell(2);                    XSSFCell phoneNumber = xssfRow.getCell(3);                    XSSFCell typeId = xssfRow.getCell(4);                    XSSFCell industryId = xssfRow.getCell(5);                    XSSFCell areaId = xssfRow.getCell(6);                    XSSFCell address = xssfRow.getCell(7);                    /*中间省略一部分*/                    user.setUsername(getValue(userId));                    member.setUser(user);                    list.add(member);                }            }        }        return list;    }

后记

读取Excel表格数据跟简单,就是几个类的调用,还是挺方便的,还有一点说明一下,对于xls文件就是那个老版本,使用的方式一样,只是名字不同而已,分别对应HSSFWorkbook,HSSFSheet,HSSFRow,HSSFCell

参考文章

  • http://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFRow.html
  • http://www.cnblogs.com/Skyyj/p/5181850.html
  • http://www.cnblogs.com/hongten/p/java_poi_excel_xls_xlsx.html
原创粉丝点击