SpringBoot中使用POI,快速實現Excel匯入匯出
阿新 • • 發佈:2019-01-03
匯出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微人事的原始碼仔細研究。
本系列其他文章:
關注公眾號,可以及時接收到最新文章: