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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM