1. 程式人生 > >記 springmvc使用POI,快速實現Excel匯入匯出

記 springmvc使用POI,快速實現Excel匯入匯出

匯出Excel

整體來說,Excel有.xls.xlsx,那麼在POI中這兩個也對應兩個不同的類,但是類名不同,方法基本都是一致的,因此我這裡將只介紹.xls一種。

整體來說,可以分為如下七個步驟:

1.建立Excel文件

HSSFWorkbook workbook = new HSSFWorkbook();
  • 1

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("備註資訊暫無");
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

這些資訊將顯示在詳細資訊窗格中:

這裡寫圖片描述

3.建立一個Excel表單,引數為sheet的名字

HSSFSheet sheet = workbook.createSheet
("XXX集團員工資訊表");
  • 1

4.建立一行

HSSFRow headerRow = sheet.createRow(0);
  • 1

0表示第一行。

5.在第一行中建立第一個單元格,並設定資料

HSSFCell cell0 = headerRow.createCell(0);
cell0.setCellValue("編號");
  • 1
  • 2

6.將Excel寫到ByteArrayOutputStream中

baos = new ByteArrayOutputStream();
workbook.write(baos);
  • 1
  • 2

7.建立ResponseEntity並返回

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

核心步驟就這七個步驟,當然還有其他設定單元格資料格式、單元格背景、單元格寬度等,大家可以在原始碼中研究,這裡就不贅述了。

匯入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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

正在上傳時,檔案上傳控制元件不可用,上傳成功或者失敗之後才可用,上傳過程中,上傳按鈕會有loading顯示。

然後在SpringMVC中接收上傳檔案即可:

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

Excel解析

將上傳到的MultipartFile轉為輸入流,然後交給POI去解析即可。可以分為如下四個步驟:

1.建立HSSFWorkbook物件

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

2.獲取一共有多少sheet,然後遍歷

int numberOfSheets = workbook.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {
    HSSFSheet sheet = workbook.getSheetAt(i);
    //...
}
  • 1
  • 2
  • 3
  • 4
  • 5

3.獲取sheet中一共有多少行,遍歷行(注意第一行是標題)

int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
Employee employee;
for (int j = 0; j < physicalNumberOfRows; j++) {
    if (j == 0) {
        continue;//標題行
    }
    //...
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4.獲取每一行有多少單元格,遍歷單元格

int physicalNumberOfCells = row.getPhysicalNumberOfCells();
employee = new Employee();
for (int k = 0; k < physicalNumberOfCells; k++) {
    HSSFCell cell = row.getCell(k);
    //...
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

單元格的遍歷就比較簡單了,將遍歷到的資料放入Employee例項中,每遍歷一行,就將一個employee例項放入集合中