springboot实现Excel导入功能
1、第一步骤:创建一个springboot的项目(也可以创建一个简答的java项目)。
1、 打开创建页面 选择File-new-project..
2、选择创建的项目为spring initializr 进入springboot项目创建步骤(也可以选择类型java,创建一个普通java项目)
3、输入项目名字,选择依赖web(如果不需要可以不选),选择存放目录-完成(Finish)
2、第二步骤:添加需要的依赖。
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>
3、第三步骤:实体类。
get和set方法自己生成。
public class ImportData {
private int id;
private String name;
private int age;
private Date createDate;
}
4、第四步骤:后台controller代码编写。
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 "导入成功!";
}
}
5、第五步骤:前端导入页面。
1、注意html页面存放的位置,默认要放excelimport\src\main\resources\templates\excelImport.html
如下图:
2:具体代码
<!DOCTYPE html><html lang="en"><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>
6、第六步骤:测试。
1、打开页面
2、选择文件,并上传。
3、测试结果输出如下图所示导入成功。