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

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例項放入集合中。

好了,大致的步驟就是這樣,詳細資訊小夥伴可以star微人事的原始碼仔細研究。

本系列其他文章:

關注公眾號,可以及時接收到最新文章:

這裡寫圖片描述