本篇收錄針對於POI導入Excel的操作sheet的一些常用步驟。
從網頁導入文件到後臺處理獲得sheet
基本架構搭建(SpringBoot+HTML+MySQL)
- 上傳組件
<div>
<div>
<label for="excel">文件:</label>
<input type="text" name="userdefinedFile" id="userdefinedFile" placeholder="未選擇任何文件" />
<button type="button">選擇文件</button>
</div>
<input type="file" name="excel" id="excel" />
</div>
- ajax發送表單數據
var formdata = new FormData($("#uploadForm")[0]);
if (fileType !== 0) {
$.ajax({
type: 'post',
url: ajaxUrl,
data: formdata,
processData: false,
contentType: false,
dataType: 'json',
success: function(res) {
},
error: function(XHR) {
}
});
}
- 後臺maven依賴
//省略部分SpringBoot依賴
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
- 獲取表單數據
@PostMapping("/upload")
@ResponseBody
public String upload(@RequestParam(value = "excel",required = false) MultipartFile excel) throws Exception {
String fileName = excel.getOriginalFilename();
return excelService.insert(fileName, excel);
}
- 獲取文件sheet
public static Sheet checkExcelVersion(String fileName, MultipartFile file) throws Exception {
//版本驗證
if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {
throw new RuntimeException("上傳文件格式不正確");
}
boolean isExcel2003 = true;
if (fileName.matches("^.+\\.(?i)(xlsx)$")) {
isExcel2003 = false;
}
InputStream is = file.getInputStream();
Workbook wb = null;
is = file.getInputStream();
if (isExcel2003) {
wb = new HSSFWorkbook(is);
} else {
wb = new XSSFWorkbook(is);
}
//返回第一個sheet
Sheet sheet = wb.getSheetAt(0);
if (sheet != null) {
notNull = true;
}
return sheet;
}
- 拓展(常用)
Excel表格sheet的頂層對象 | |
---|---|
getActiveSheetIndex() | 獲取當前工作表中活動的工作表 |
getSheetAt(int index) | 獲取給定索引處的工作表對象。 |
getSheetIndex(Sheet sheet) | 返回給定工作表的索引 |
getSheetName(int sheet) | 獲取工作表名稱 |
Workbook下的sheet工作表,包含單元格 | |
---|---|
getFirstRowNum() | 獲取工作表的第一行 |
getLastRowNum() | 獲取工作表有內容的最後一行 |
getPhysicalNumberOfRows() | 返回已定義工作行的行數 |
getRow(int rownum) | 返回索引起的邏輯行 |
isColumnHidden(int columnIndex) | 判斷索引處列是否爲隱藏列 |