easypoi模板导入/模板导出~~一文搞定
----------------------------------话不多说直接开始
//传参
// 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;@Overridepublic String getErrorMsg() {return errorMsg;}@Overridepublic void setErrorMsg(String errorMsg) {this.errorMsg = errorMsg;}@Overridepublic int getRowNum() {return rowNum;}@Overridepublic 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表的表头进行匹配的
注意一定要实体类和表头对应进行导入
本文结束。有问题留言文章持续更新
easypoi模板导入/模板导出~~一文搞定相关推荐
- easypoi 模板导入、导出合并excel单元格功能
easypoi 模板导入.导出合并单元格功能 参考: hutool 导出复杂excel(动态合并行和列) java使用poi读取跨行跨列excel springboot集成easypoi并使用其模板导 ...
- npoi把xlsx文件转为html,C# NPOI 导入与导出Excel文档 兼容xlsx, xls(xf13中已经引用了xlsx的npoi)...
这里使用的NPOI版本为: 2.1.3.1 版本内包含.Net 2.0 与.Net 4.0 .Net 4.0中包含文件 使用时需引用需要引用所有5个dll 使用到的引用 using NPOI.HSSF ...
- 一文搞定 Spring Data Redis 详解及实战
转载自 一文搞定 Spring Data Redis 详解及实战 SDR - Spring Data Redis的简称. Spring Data Redis提供了从Spring应用程序轻松配置和访问 ...
- 一文搞定c++多线程同步机制
c++多线程同步机制 前序文章:一文搞定c++多线程 同步与互斥 现代操作系统都是多任务操作系统,通常同一时刻有大量可执行实体,则运行着的大量任务可能需要访问或使用同一资源,或者说这些任务之间具有依赖 ...
- 一文搞定c++多线程
一文搞定c++多线程 c++11引入了用于多线程操作的thread类,该库移植性更高,并且使得写多线程变得简洁了一些. 多线程头文件支持 为了支持多线程操作,c++11新标准引入了一些头文件来支持多线 ...
- 【Python基础】一文搞定pandas的数据合并
作者:来源于读者投稿 出品:Python数据之道 一文搞定pandas的数据合并 在实际处理数据业务需求中,我们经常会遇到这样的需求:将多个表连接起来再进行数据的处理和分析,类似SQL中的连接查询功能 ...
- 一文搞定pandas的数据合并
作者:来源于读者投稿 出品:Python数据之道 一文搞定pandas的数据合并 在实际处理数据业务需求中,我们经常会遇到这样的需求:将多个表连接起来再进行数据的处理和分析,类似SQL中的连接查询功能 ...
- php带参数单元测试_一文搞定单元测试核心概念
基础概念 单元测试(unittesting),是指对软件中的最小可测试单元进行检查和验证,这里的最小可测试单元通常是指函数或者类.单元测试是即所谓的白盒测试,一般由开发人员负责测试,因为开发人员知道被 ...
- 一文搞定Swing和Qt按钮和文本框的创建
一文搞定Swing和Qt按钮和文本框的创建 Qt的截图 java的 源码 package com.lujun;import java.awt.Container;import javax.swing. ...
最新文章
- 如何通过BIPlatform完成多维报表以及图形配置
- CentOS7中使用Dockerfile部署后台jar包
- App Store 扣费 知识产权 备忘
- 什么是模拟光端机?模拟光端机优缺点介绍!
- python读写json_python 读写json数据
- java在什么环境变量_Java-环境变量
- vb不能插入png图片_收藏备用!!VBA操作图片【插入导出删除】
- wxPython:当密码账号输入正确,登录界面消失并显示主界面
- 【车道线检测与寻迹】【1月8日】车辆、道路模型与道路跟踪
- 【php写日志】php将日志写入文件
- 【7集iCore3基础视频】7-5 iTool2驱动安装
- Android 11.0 12.0关机界面全屏显示(UI全屏显示)
- 已解决Pandas requires version ‘1.4.0‘ or newer of ‘sqlalchemy‘ (version ‘0.7.10‘ currently installed).
- 简单阶乘计算 (本题要求实现一个计算非负整数阶乘的简单函数)
- Linux安装Docker CE
- 大二上---数据结构课程设计
- MxNet系列——how_to——new_op
- 【Redis核心原理和应用实践】应用 2:缓兵之计 —— 延时队列
- 使用 SSM 框架实现发送手机短信验证码
- 分析Java未来几年的发展前景