前端页面
注意前端页面的name值必须和后台的一样,设置为file。不然会报错的,自己踩过的坑。
1:先获取Excel表的格式,按格式填写,再进行上传。
IDEA创建SpringBoot项目
pom.xml
org.apache.poi
poi
3.7
org.apache.poi
poi-ooxml
3.7
org.apache.poi
poi-ooxml-schemas
3.7
io.springfox
springfox-swagger-ui
2.9.2
io.springfox
springfox-swagger2
2.9.2
SwaggerConfig
package com.excel.demo.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* @author djw
* @create 2018-04-20 上午10:50
* @desc swagger配置类
**/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket restApi() {
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.excel.demo.Controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Excel操作相关接口")
.description("Excel操作相关接口")
.version("1.0.0")
.build();
}
}
ExcelController
package com.excel.demo.Controller;
import com.excel.demo.Pojo.User;
import com.excel.demo.Utils.ExcelExport;
import com.excel.demo.Utils.ExcelImport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("excel")
@Api(value = "ecxel相关操作",description = "excel相关操作")
public class ExcelController {
/*
@GetMapping("getExcel")
@ApiOperation(value = "导出Excel",notes = "导出Excel")
public void getExcel(HttpServletResponse response) {
//excel标题
String[] title = {"名称", "性别", "年龄", "学校", "班级"};
//excel文件名
String fileName = "学生信息表";
String sheetName = "学生信息表";
String[][] values = {{"张三", "男", "18", "家里蹲大学", "14电信1班"}, {"张三", "男", "18", "家里蹲大学", "14电信1班"}, {"张三", "男", "18", "家里蹲大学", "14电信1班"},
{"张三", "男", "18", "家里蹲大学", "14电信1班"}, {"张三", "男", "18", "家里蹲大学", "14电信1班"}, {"张三", "男", "18", "家里蹲大学", "14电信1班"},
{"张三", "男", "18", "家里蹲大学", "14电信1班"}};
//创建HSSFWorkbook
HSSFWorkbook wb = ExcelUtil.createWorkbook(sheetName, title, values);
//响应到客户端
try {
//设置编码、输出文件格式
response.reset();
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");
OutputStream os = response.getOutputStream();
wb.write(os);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
*/
@GetMapping("createExcel")
@ApiOperation(value = "创建excel表格",notes = "创建Excel表格")
public void createExcel(HttpServletResponse response){
//添加测试数据
List userList = new ArrayList<>();
for (int i = 0; i < 20; i++) {
User user = new User();
user.setUserId(i);
user.setUserName("张三"+i);
user.setSex("男");
user.setAge(i);
user.setSchool("学校"+i);
userList.add(user);
}
//excel标题
String[] title = {"id", "姓名", "性别", "年龄", "学校"};
String[][] objects = new String[userList.size()][title.length];
for (int i = 0; i < userList.size(); i++) {
User user = userList.get(i);
objects[i][0] = String.valueOf(user.getUserId());
objects[i][1] = user.getUserName();
objects[i][2] = user.getSex();
objects[i][3] = String.valueOf(user.getAge());
objects[i][4] = user.getSchool();
}
String fileName = "学生信息表";
//创建HSSFWorkbook
HSSFWorkbook wb = ExcelExport.createWorkbook(fileName, title, objects);
//响应到客户端
try {
//设置编码、输出文件格式
response.reset();
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");
OutputStream os = response.getOutputStream();
wb.write(os);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//@GetMapping("importExcel")
@PostMapping("importExcel")
@ApiOperation(value = "导入Excel",notes = "将数据以Excel的形式导入到数据库中")
public Boolean importExcel(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws Exception {
//获取用户上传表格的地址,执行完程序后表格将会删除,避免占用内存
String filePath = request.getSession().getServletContext().getRealPath("/");
//根据地址和文件名准确获取用户上传的表格
File tempFile = new File(filePath+file.getOriginalFilename());
try {
//将MultipartFile转换为File类型
file.transferTo(tempFile);
List
User
package com.excel.demo.Pojo;
/**
* @Author djw
* @Description 演示所创建的对象
* @Date 2018/9/5 14:52
*/
public class User {
Integer userId;
String userName;
String sex;
Integer age;
String school;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", school='" + school + '\'' +
'}';
}
}
ExcelExport
package com.excel.demo.Utils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
/**
* @Author djw
* @Description //TODO
* @Date 2018/9/5 15:52
*/
public class ExcelExport {
/**
* 导出Excel
* @param sheetName sheet名称
* @param title 标题
* @param values 内容
* @return
*/
public static HSSFWorkbook createWorkbook(String sheetName,String []title,String [][]values){
// 第一步,创建一个HSSFWorkbook,对应一个Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
// 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet(sheetName);
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
HSSFRow row = sheet.createRow(0);
// 第四步,创建单元格,并设置值表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
//声明列对象
HSSFCell cell = null;
//创建标题
for(int i=0;i
ExcelImport
package com.excel.demo.Utils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author djw
* @Description //TODO
* @Date 2018/9/5 16:16
*/
public class ExcelImport {
/**
* @param dest 表格文件
* @param cellLength 一行多少个单元格
* @return 返回list集合
* @throws Exception
*/
public static List