zoukankan      html  css  js  c++  java
  • SpringBoot中使用POI,快速实现Excel导入导出

    导出Excel

    整体来说,Excel有.xls.xlsx,那么在POI中这两个也对应两个不同的类,但是类名不同,方法基本都是一致的,因此我这里将只介绍.xls一种。

    整体来说,可以分为如下七个步骤:

    1.创建Excel文档

    HSSFWorkbook workbook = new HSSFWorkbook();

    2.设置文档的基本信息,这一步是可选的

    //获取文档信息,并配置
    DocumentSummaryInformation dsi = workbook.getDocumentSummaryInformation();
    //文档类别
    dsi.setCategory("员工信息");
    //设置文档管理员
    dsi.setManager("江南一点雨");
    //设置组织机构
    dsi.setCompany("XXX集团");
    //获取摘要信息并配置
    SummaryInformation si = workbook.getSummaryInformation();
    //设置文档主题
    si.setSubject("员工信息表");
    //设置文档标题
    si.setTitle("员工信息");
    //设置文档作者
    si.setAuthor("XXX集团");
    //设置文档备注
    si.setComments("备注信息暂无");

    这些信息将显示在详细信息窗格中:

    图片描述

    3.创建一个Excel表单,参数为sheet的名字

    HSSFSheet sheet = workbook.createSheet("XXX集团员工信息表");

    4.创建一行

    HSSFRow headerRow = sheet.createRow(0);

    0表示第一行。

    5.在第一行中创建第一个单元格,并设置数据

    HSSFCell cell0 = headerRow.createCell(0);
    cell0.setCellValue("编号");

    6.将Excel写到ByteArrayOutputStream中

    baos = new ByteArrayOutputStream();
    workbook.write(baos);

    7.创建ResponseEntity并返回

    return new ResponseEntity<byte[]>(baos.toByteArray(), headers, HttpStatus.CREATED);

    核心步骤就这七个步骤,当然还有其他设置单元格数据格式、单元格背景、单元格宽度等,大家可以在源码中研究,这里就不赘述了。

    导入Excel数据

    数据导入主要涉及三个步骤 1.文件上传;2.Excel解析;3.数据插入。 第三步就比较简单了,我们这里重点来看看前两个步骤。

    文件上传

    文件上传采用了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>{{fileUploadBtnText}}
    </el-button>
    </el-upload>

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

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

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

    Excel解析

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

    1.创建HSSFWorkbook对象

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

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

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

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

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

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

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

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

  • 相关阅读:
    Codeforces Round #296 (Div. 2B. Error Correct System
    实验十二 图的建立与遍历
    1561: (More) Multiplication
    1562: Fun House
    hdu 2203 亲和串
    hdu 3549Flow Problem
    poj 2182 Lost Cows
    poj 3468A Simple Problem with Integers
    hdu1698 Just a Hook
    栈和队列的面试题Java实现
  • 原文地址:https://www.cnblogs.com/fuyaozhishang/p/10965746.html
Copyright © 2011-2022 走看看