天天看點

springboot實作Excel導入功能

添加需要的依賴。

1、添加web依賴用于前背景的互動,也就是servlet的功能。

這個在建立的時候可以直接選擇就可以。

2、添加POI的依賴用于Excel的操作。

<!--引入poi--><dependency>    

<groupId>org.apache.poi</groupId>    

<artifactId>poi</artifactId>    

<version>4.0.0</version>

</dependency><dependency>    

<groupId>org.apache.poi</groupId>    

<artifactId>poi-ooxml</artifactId>    

<version>4.0.0</version></dependency>
           

3、添加視圖解析Thymeleaf實作頁面的展示。

<!--Thymeleaf-->

<dependency>    

<groupId>org.springframework.boot</groupId>   

 <artifactId>spring-boot-starter-thymeleaf</artifactId>

</dependency>
           

4、

controller主要分為三部分

1、引入需要的包

2、跳轉到導入頁面的請求

3、Excel導入請求,簡單來說就是上傳+excel讀取

package com.example.excelimport.controller;

import com.example.excelimport.excel.ImportData;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.*;

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.List;

@Controller

public class ExcelImportController {    

@GetMapping("/toHtml")    

String test(HttpServletRequest request) {        

return "excelImport";    

}    

//處理檔案上傳    

@ResponseBody//傳回json資料    

@RequestMapping(value = "/excelImport", method = RequestMethod.POST)    

public String uploadImg(@RequestParam("file") MultipartFile file,                            HttpServletRequest request) {        

String contentType = file.getContentType();        

String fileName = file.getOriginalFilename();        

if (file.isEmpty()) {            

return "檔案為空!";        

}        

try {            

//根據路徑擷取這個操作excel的執行個體            

HSSFWorkbook wb = new HSSFWorkbook(file.getInputStream());            //根據頁面index 擷取sheet頁            

HSSFSheet sheet = wb.getSheetAt(0);            

//實體類集合            

List<ImportData> importDatas = new ArrayList<>();            

HSSFRow row = null;            

//循環sesheet頁中資料從第二行開始,第一行是标題            

for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) {                

//擷取每一行資料                

row = sheet.getRow(i);                

ImportData data = new ImportData();                

data.setId(Integer.valueOf((int) row.getCell(0).getNumericCellValue()));     data.setName(row.getCell(1).getStringCellValue());                

SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");               data.setCreateDate(df.parse(df.format(HSSFDateUtil.getJavaDate(row.getCell(2).getNumericCellValue()))));                

data.setAge(Integer.valueOf((int) row.getCell(3).getNumericCellValue()));                importDatas.add(data);            

}            

//循環展示導入的資料,實際應用中應該校驗并存入資料庫            

for (ImportData imdata : importDatas) {                

SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");                

System.out.println("ID:"+imdata.getId()+" name:"+imdata.getName()+" createDate:"+df.format(imdata.getCreateDate())+" age:"+imdata.getAge());            

}        

} catch (Exception e) {            

e.printStackTrace();       

 }        

return "導入成功!";   

 }

}
           

前端導入頁面。

1、注意html頁面存放的位置,預設要放excelimport\src\main\resources\templates\excelImport.html

如下圖:

2:具體代碼

<!DOCTYPE html>
<html >
<head>    
<meta charset="UTF-8">    
<title>Excel導入</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="/excelImport">    
選擇Excel表格:<input type="file" name="file"/><br/>    
<input type="submit" value="上傳"/>
</form>
</body>
</html>
           

繼續閱讀