使用Easypoi实现Excel导入导出
EayPoi官方文档
1.Excel的导出
这是我刚开始工作所写的博客,(java小白)为了让自己对这些新学的知识,框架更加的熟悉,熟练,以此来此记录,如有错误,请各位大佬指正!!!
因为公司采用的前后端分离方式,所以本人所有的代码都只有后端接口。且返回的结果集是公司自己封装的一个josn处理结果集。(全部返回josn字符串)
1.1导入依赖
导入EasyPoi依赖,我导入的是4.1.0版本,如要导入其他版本,请考虑版本冲突问题。
<easypoi.version>4.1.0</easypoi.version>
<!-- easypoi依赖 --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>${easypoi.version}</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>${easypoi.version}</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>${easypoi.version}</version></dependency>
1.2导出源码
实体类:
在想要导出的字段上加Excel注解,自己在name属性设置导出后的key值
web层:
@RequestMapping(value = "/personnelCountOut",method = RequestMethod.POST)
public void personnelCountOut(HttpServletResponse response,@RequestBody ItemRecordDTO itemRecordDTO) throws IOException {//itemRecordDTOS 为想要导出的数据,List<ItemRecordDTO> itemRecordDTOS = itemRecordService.listItemPersonnelCountList(itemRecordDTO);// 设置响应输出的头类型// 设置响应输出的头类型response.setHeader("content-Type", "application/vnd.ms-excel");// 设计导出文件的名称,尽量不要中文String fileName = new String("导出.xls".getBytes(), "ISO-8859-1");response.setHeader("Content-Disposition","attachment;filename="+fileName);//输出流。ServletOutputStream out = response.getOutputStream();// 创建参数对象(用来设定excel得sheet的内容等信息)ExportParams params = new ExportParams() ; //sheet// title的参数为ExportParams类型,目前仅仅在ExportParams中设置了sheetNameparams.setSheetName("导出");Workbook workbook = ExcelExportUtil.exportExcel(params, ItemRecordDTO.class,itemRecordDTOS) ;workbook.write(out);}
上面的ItemRecordDTO 实体类是一个搜索条件,根据自己的实际情况来创建,也可以导出所有,就是不要条件,那么就不需要实体类参数,请求方法改为get。有对象参数请求方式为post。
1.3导出测试结果
直接浏览器输出该接口的路径,进行下载。
http://localhost:8080/ts/api/ts/manage/xf/v1/learningPowerManage/exportTemplate
根据自己真实的路径进行修改。
打开文档看看是不是我们前面放进去的数据
ExcelPoi导出成功!!!
2.简单的Excel的导入
不考虑重复,以及格式问题
2.1定义导入的实体类
自定义一个导入的实体类,@Data注解作用就是创建这些类的Getter、Setter和构造方法。
如果需要使用这个注解需要导入lombok依赖;如果使用这个注解,就自己创建Getter、Setter和构造方法。
<properties><lombok.version>1.18.8</lombok.version>
</properties>
<!--lombok依赖-->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version>
</dependency>
实体类:
导入的字段都需要加上@Excel注解,name= excel表格内的名称(最好与字段名相同)。
@Data
public class ExcelInputObj {/*** id*/@Excel(name = "id")private String id;/*** 身份证号*/@Excel(name = "身份证号")private String partyMemberIdnumber;/*** 姓名*/@Excel(name = "姓名")private String partyMemberName;/*** 电话*/@Excel(name = "电话")private String partyMemberPhone;/*** 入党日期*/@Excel(name = "入党日期")private Date partyMemberTime;private static final long serialVersionUID = 1L;
2.2导入源码
这里需要注意表头的行数设置一定要正确!否则集合数据将无法读取。一定要区分表头与标题的区别,表头是列名称,标题是表头上面的文字,示例文件中没有标题,所以setTitleRows为0
@RequestMapping(value = "/input")public void excelInput(@RequestParam("file") MultipartFile multipartFile) throws Exception {ImportParams params = new ImportParams();// 表头设置为2行params.setHeadRows(2);// 标题行设置为0行,默认是0,可以不设置params.setTitleRows(0);// 开启Excel校验params.setNeedVerify(true);params.setVerifyHandler(excelRepetitionApi);ExcelImportResult<PartyMemberInfo> result = ExcelImportUtil.importExcelMore(multipartFile.getInputStream(),PartyMemberInfo.class, params);System.out.println("是否校验失败: " + result.isVerfiyFail());System.out.println("校验失败的集合:" + JSONObject.toJSONString(result.getFailList()));System.out.println("校验通过的集合:" + JSONObject.toJSONString(result.getList()));for (PartyMemberInfo entity : result.getFailList()) {int line = entity.getRowNum() + 1;String msg = "第" + line + "行的错误是:" + entity.getErrorMsg();System.out.println(msg);}}
2.3导入测试
如下图所示,测试成功
获取到要插入到数据库中的数据,再使用批量插入方法,将集合插入到数据库中
在dao层创建批量插入方法:
int insertPartyInfoList(@Param("excelInputObjs") List<ExcelInputObj> excelInputObjs);
sql语句:(根据自己的数据库字段进行修改)
<insert id="insertPartyInfoList">insert into party_member_info(party_member_Idnumber, id, party_member_name, party_member_phone,party_member_time) values<foreach collection="excelInputObjs" separator="," index="index" item="item">(#{item.partyMemberIdnumber},#{item.id},#{item.partyMemberName},#{item.partyMemberPhone},#{item.partyMemberTime})</foreach></insert>
在service层批量添加创建接口:
int insertPartyInfoList(List<ExcelInputObj> excelInputObj);
实现类:
@Overridepublic int insertPartyInfoList(List<ExcelInputObj> excelInputObj) {return partyMemberInfoMapper.insertPartyInfoList(excelInputObj);}
在controller层的那个类中加入批量添加的方法
int i =partyMemberInfoService.insertPartyInfoList(results);
最终返回结果:
看看数据库有没有成功添加
原先数据库
添加后的数据库
其他字段可以根据自己实体类的字段进行添加
EasyPoi简单的导入导出就到这啦!!!!
使用Easypoi实现Excel导入导出相关推荐
- SpringBoot集成EasyPoi实现Excel导入导出
作者介绍: 本人Java特工,代号:Cris Li : 中文名:克瑞斯理 简书地址: 消失的码农 - 简书 CSDN地址: https://blog.csdn.net/jianli95 个人纯洁版博客 ...
- SpringBoot 系列教程(十三):SpringBoot集成EasyPoi实现Excel导入导出
"无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点人工智能教程可以跳转到教程. easyp ...
- java超级简单到爆的Excel导入导出(easypoi)
场景: 在日常工作中,excel导入导出,是十分常见的,有两种主流的技术,一种是jxl,另一种是poi,而easypoi就是对poi进行了封装,使得导入导出变得更加的简单,阿里巴巴也有封装的工具名叫E ...
- easypoi 多sheet导入_程序员接私活利器 玩转excel导入导出
为什么会写Easypoi 以前的以前(岁月真TMD的快)我虽然写了不少代码但还是很少写poi,然后跳到一家公司之后就和业务人员聊上了,来这个需要个报表,这个报表样式是这样的,这个表头是这样的,就这样我 ...
- easypoi 多sheet导入_easy-poi: Easy-POI是一款Excel导入导出解决方案组成的轻量级开源组件。...
Easy-POI Easy-POI是一款Excel导入导出解决方案组成的轻量级开源组件. 如果喜欢或愿意使用, 请star并且Watch本项目或者移步码云捐赠我们 https://gitee.com/ ...
- 推荐一款非常好用的Excel导入导出工具EasyPoi
EasyPoi简介 用惯了SpringBoot的朋友估计会想到,有没有什么办法可以直接定义好需要导出的数据对象,然后添加几个注解,直接自动实现Excel导入导出功能? EasyPoi正是这么一款工具, ...
- easypoi导入校验跳过空行_Easy-POI是一款Excel导入导出解决方案组成的轻量级开源组件...
Excel-Boot是一款Excel导入导出解决方案组成的轻量级开源组件. 如果喜欢或愿意使用, 请star本项目或者点击donate图标捐赠我们 如果是企业使用, 为了产品推广, 请通过评论.Iss ...
- SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了!
在我们平时工作中经常会遇到要操作Excel的功能,比如导出个用户信息或者订单信息的Excel报表.你肯定听说过POI这个东西,可以实现.但是POI实现的API确实很麻烦,它需要写那种逐行解析的代码(类 ...
- 集成easypoi实现excel图片导出
我们先来看一眼,跟着本文实现下来的最终效果.如下图所示: 一.引入pom依赖 实现excel图片导出,我们还是得依赖于easypoi来做.所以你们只需要在你们的pom.xml依赖中加上如下easypo ...
最新文章
- 普通计算机怎么算根号_混凝土花盆叠加做花园围墙,比普通红砖块好看多了,怎么算都赚到...
- 前端学习(1740):前端调试值之保持元素的hover状态
- 用脚本判断用户传参的参数是否有对应的进程在运行并把结果显示给用户
- Vue2.0三——Vue-router
- SharePoint2010升级到SharePoint2013操作手册
- 27.Linux/Unix 系统编程手册(上) -- 程序的执行
- 廖雪峰Git教程:远程仓库
- vue手机号校验,邮箱校验
- VNC远程控制软件,VNC远程控制软件如何实现批量管理服务器
- 德国是2018世界杯夺冠最大热门? Python数据分析来揭开神秘面纱…
- WPF 鼠标滚轮对图片的缩放
- BS版的U8物料查询系统
- 后缀是lnk是什么文件_ink是什么文件?ink文件怎么打开
- PIE-engine 教程 ——新疆石河子市棉花种植面积提取(阈值法)案例分析
- 关于加强网络舆情监测的几点建议,TOOM强化舆情监控有方法
- 【HDU 2612 Find a Way(BFS)】(兼BFS入门笔记)
- 1343: 平方和与立方和
- vacuum命令详解
- flarum 轻论坛安装教程
- 微软安全软件OneCare Live
热门文章
- jabref学习笔记
- 计算机的工作原理是什么选择题,计算机系统的组成及工作原理试题及答案
- Boost之日期时间处理(date_time库)
- Linux/Deepin全流程安装指南:双显卡-Prime-docker-Nvidia_docker-ROS-日常应用
- Android 热修复、插件化、双开基本原理
- Python基础学习-简要记录
- 机器学习 | 朴素贝叶斯法知识总结
- 2014年最新显卡天梯图
- 直播电商源码是怎样实现快速打开直播的
- 苹果手机用计算机打不开怎么回事啊,苹果手机开机后一直显示苹果标志开不了机是怎么回事...