25.使用POI实现Excel导入

 

数据导入主要涉及三个步骤:

  1. 文件上传;
  2. Excel 解析;
  3. 数据插入。

第三步就比较简单了,我们这里重点来看看前两个步骤。

25.1 文件上传

文件上传采用了 ElementUI 中的 Upload 控件,如下:

<el-upload
:show-file-list="false"
accept="application/vnd.ms-excel"
action="/emp/basic/importEmp"
:on-success="fileUploadSuccess"
:on-error="fileUploadError" :disabled="fileUploadBtnText=='正在导入'"
:before-upload="beforeFileUpload" style="display: inline">
<el-button size="mini" type="success" :loading="fileUploadBtnText=='正在导入'"><i class="fa fa-lg fa-level-up" style="margin-right: 5px"></i>
</el-button>
</el-upload>

正在上传时,文件上传控件不可用,上传成功或者失败之后才可用,上传过程中,上传按钮会有 loading 显示。

然后在 SpringMVC 中接收上传文件即可:

@RequestMapping(value = "/importEmp", method = RequestMethod.POST)
public RespBean importEmp(MultipartFile file) {
    //...
}

25.2 Excel 解析

将上传到的 MultipartFile 转为输入流,然后交给 POI 去解析即可。可以分为如下四个步骤:

25.2.1 创建 HSSFWorkbook 对象

HSSFWorkbook workbook = new HSSFWorkbook(new POIFSFileSystem(file.getInputStream()));

25.2.2 获取一共有多少 sheet,然后遍历

int numberOfSheets = workbook.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {
    HSSFSheet sheet = workbook.getSheetAt(i);
    //...
}

25.2.3 获取 sheet 中一共有多少行,遍历行(注意第一行是标题)

int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
Employee employee;
for (int j = 0; j < physicalNumberOfRows; j++) {
    if (j == 0) {
        continue;//标题行
    }
    //...
}

25.2.4 获取每一行有多少单元格,遍历单元格

int physicalNumberOfCells = row.getPhysicalNumberOfCells();
employee = new Employee();
for (int k = 0; k < physicalNumberOfCells; k++) {
    HSSFCell cell = row.getCell(k);
    //...
}

单元格的遍历就比较简单了,将遍历到的数据放入 Employee 实例中,每遍历一行,就将一个employee 实例放入集合中。

扫码关注微信公众号 江南一点雨,回复 2TB,获取超 2TB Java 学习教程~

喜欢这篇文章吗?扫码关注公众号【江南一点雨】【江南一点雨】专注于 SPRING BOOT+微服务以及前后端分离技术,每天推送原创技术干货,关注后回复 JAVA,领取松哥为你精心准备的 JAVA 干货!

本文遵守 Attribution-NonCommercial 4.0 International 许可协议。 Attribution-NonCommercial 4.0 International