----------------------------------话不多说直接开始
//传参
// fileName 为导出模板
excelUtil.exportExcelTemplate(response,fileName,newsPriceVoList);
//TEMPLATE 是服务器存放文件得路径
//方法
public static void exportExcelTemplate(HttpServletResponse response, String fileName,List<?> data) throws IOException {
TemplateExportParams params = new TemplateExportParams(TEMPLATE + fileName, true);
Map<String, Object> stringObjectHashMap = new HashMap<>();
stringObjectHashMap.put("list",data);
response.setHeader("Content-Disposition",
"attachment;filename=" + new String(fileName.getBytes("UTF-8"), "iso8859-1"));
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
BufferedOutputStream bufferedOutPut = new BufferedOutputStream(response.getOutputStream());
Workbook workbook = ExcelExportUtil.exportExcel(params,stringObjectHashMap);
workbook.write(bufferedOutPut);
bufferedOutPut.flush();
bufferedOutPut.close();
}
//实体类需要对应下图字段 字段具体可以参照easyPoi官方文档
public class student{
//实体类对应模板表格示例
public String name;
public String class;
public String sex;
}
注意一定有闭口{{}}括号 t可以不加,属性字段对应的实体类中的字段
----------------------------分割线,导出到此结束。下边开始导入--------------------------
导入需要注意的点是导入模板和实体类中easy的注解需要对应
·····实体类
//先上实体类 注意要实现IExcelModel 和 IExcelDataModel 两个easypoi接口
@Data
public class StudentExport implements Serializable, IExcelModel, IExcelDataModel {
//非空判断
@NotBlank(message = "学生姓名不能为空")
//对应的excel表 表头信息
@Excel(name="学生姓名)")
//长度信息
@Length(max = 30,message = "长度不可超出30字符")
private String name;
@NotBlank(message = "班级名称不能为空")
@Excel(name="班级名称")
@Length(max = 50,message = "长度不可超出50字符")
private String class;
@Excel(name="性别")
private String companyType;
//注意 errorMsg; 和 rowNum; 参数一定要进行构造 因为errormsg是主要反应报错信息,比如
//学生姓名为空了 在导入的时候这条数据的错误信息就是 -->
//学生姓名不能为空 (对应 @NotBlank或者 @Length 里边的 message)
private String errorMsg;
private int rowNum;
@Override
public String getErrorMsg() {
return errorMsg;
}
@Override
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
@Override
public int getRowNum() {
return rowNum;
}
@Override
public void setRowNum(int rowNum) {
this.rowNum = rowNum;
}
}
··导入方法
//传参
mallUtil.supplierBatchAdd(file)
//方法
public Map supplierBatchAdd(MultipartFile file) {
if (!file.isEmpty()) {
//文件名称
int begin = Objects.requireNonNull(file.getOriginalFilename()).indexOf(".");
//文件名称长度
int last = file.getOriginalFilename().length();
if (file.getSize() > 5242880) {
throw new IllegalArgumentException("上传文件不可超5M");
}
//判断文件格式是否正确
String fileName = file.getOriginalFilename().substring(begin, last);
if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) {
throw new IllegalArgumentException("上传文件格式有误,仅支持xls、xlsx文件");
}
} else {
throw new IllegalArgumentException("该文件无数据");
}
//使用EasyPoi获取文件数据
ImportParams params = new ImportParams();
//标题(设置忽略的行,字段列前几行)
params.setTitleRows(5);
//表头(列字段占几行)
params.setHeadRows(1);
//设置验证支持 验证支持开开之后才会判断实体类中的限制i套件
params.setNeedVerify(true);
//设置读取行数(默认从0开始)
params.setReadRows(299);
ExcelImportResult<StudentExport > result;
List<StudentExport > failList = new ArrayList<>();
try {
result = ExcelImportUtil.importExcelMore(file.getInputStream(), StudentExport .class, params);
} catch (Exception e) {
throw new IllegalArgumentException(e.getMessage());
}
if (result != null) {
if (result.isVerfiyFail()) {
failList = result.getFailList().stream().filter(b -> !BeanUtil.isEmpty(b, "errorMsg", "rowNum")).collect(Collectors.toList());
}
if (Integer.sum(result.getList().size(), failList.size()) == 0) {
throw new IllegalArgumentException("该文件无数据");
}
//可以执行新增操作,也可以进行各种逻辑处理方法改造性很强
//一定要注意有两个list 一个 failList 是错误数据的集合 result.getList()
//是正确数据的集合 可以对这两个集合进行操作
//这个map是我自己处理逻辑的操作
return map;
}
}
导入不难看出导入的匹配规则是根据 excel表的表头进行匹配的
注意一定要实体类和表头对应进行导入