POI 操作Excel導入篇1 -- 基本架構

本篇收錄針對於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;
    }
  • 拓展(常用)
Workbook
Excel表格sheet的頂層對象
getActiveSheetIndex() 獲取當前工作表中活動的工作表
getSheetAt(int index) 獲取給定索引處的工作表對象。
getSheetIndex(Sheet sheet) 返回給定工作表的索引
getSheetName(int sheet) 獲取工作表名稱
Sheet
Workbook下的sheet工作表,包含單元格
getFirstRowNum() 獲取工作表的第一行
getLastRowNum() 獲取工作表有內容的最後一行
getPhysicalNumberOfRows() 返回已定義工作行的行數
getRow(int rownum) 返回索引起的邏輯行
isColumnHidden(int columnIndex) 判斷索引處列是否爲隱藏列

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章