使用apache poi 实现Excel批量导入

前言

 做客户模块的时候需要用到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

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值