使用EasyExcel实现模板下载、数据导入功能
这里是在springboot项目下使用EasyExcel实现模板下载、数据导入功能。 顺便记录下自己遇到的一些坑。
一.模板下载
1.在你的工程下添加模板文件
2.编写代码实现下载功能
controller
//下载模板@PostMapping(value="/downloadWorkplacedetail")public void downloadWorkplacedetail(HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException {jobManageService.downloadWorkplacedetail(response);}
serviceImpl
public void downloadWorkplacedetail(HttpServletResponse response) {//方法一:直接下载路径下的文件模板(这种方式貌似在SpringCloud和Springboot中,打包成JAR包时,无法读取到指定路径下面的文件,不知道记错没,你们可以自己尝试下!!!)try {//文件名称String fileName = "jobWorkplace.xlsx";//设置要下载的文件的名称setExcelRespProp(response,"jobWorkplace");InputStream input = JobManageServiceImpl.class.getClassLoader().getResourceAsStream("/excel/" + fileName);OutputStream out = response.getOutputStream();byte[] b = new byte[2048];int len;while ((len = input.read(b)) != -1) {out.write(b, 0, len);}input.close();if (out != null) {out.flush();out.close();}} catch (Exception ex) {ex.printStackTrace();}}
好了,到这里,一个简单的下载模板功能就实现了。不过我在项目运行中遇到了一些坑,下面记录一下。
3.项目中遇到的坑:excel文件在springboot的maven项目下打了jar包后损坏
4.解决办法:试了很多种,主要有三种方式,首推荐第一种
(1)该问题主要是maven打包时过滤导致该文件损坏,所以解决方案就是去掉过滤即可,在pom.xml文件中加入如下配置
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><configuration><nonFilteredFileExtensions><!--不加这一行,xlsx文件会被过滤,然后在maven build的时候,去target下看对应的xlsx就是损坏的--><nonFilteredFileExtension>xlsx</nonFilteredFileExtension></nonFilteredFileExtensions></configuration></plugin></plugins>
</build>
(2).直接关闭所有过滤,resource–filtering直接设置为false:不过这样做有可能读取不到其他配置而出现错误
<resources><resource><directory>${project.basedir}/src/main/resources</directory><filtering>false</filtering></resource>
</resources>
(3).如果前两种都不怎么起效果的话…那就只能用比较笨以及麻烦的法子了:
在install命令打了jar包后,打开文件发现是损坏的,那么把jar包复制出来,用解压器打开,在文件目标位置替换一个好的进去。。。这样虽然也可以,但需要每次打jar包时都记得手动维护,所以并不推荐
二.模板导入
好了,接下来讲简单实现模板导入功能
1.添加EasyExcel依赖
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version>
</dependency>
2.实体类
public class WorkplacedetailEntity implements Serializable {/*** 主键*/@ExcelIgnoreprivate Long id;/*** 姓名*/@ExcelProperty("姓名")@ColumnWidth(20)private String name;/*** 电话*/@ExcelProperty("电话")@ColumnWidth(20)private String phone;
}
3.controller
//导入职场明细@RequestMapping(value="/importWorkplacedetail")public ResponseData importWorkplacedetail(MultipartHttpServletRequest request) throws Exception {jobManageService.importWorkplacedetail(request);return this.successResonse(null);}
4.serviceImpl
public void importWorkplacedetail(MultipartHttpServletRequest request) throws IOException {MultipartFile file = request.getFile("file");System.out.println("导入职场明细功能参数file="+file);String unicomcode = request.getParameter("unicomcode");System.out.println("导入职场明细功能参数unicomcode="+unicomcode);DManagecomEntity query = new DManagecomEntity();query.setUnicomcode(unicomcode);Map<String, Object> data = this.queryDManagecom(query);List<DManagecomEntity> dManagecomEntityList = (List<DManagecomEntity>) data.get("list");//excel读取数据List<WorkplacedetailEntity> workplacedetailEntityList = EasyExcel.read(new BufferedInputStream(file.getInputStream())).head(WorkplacedetailEntity.class).sheet().doReadSync();System.out.println("解析到workplacedetailEntityList--------------------------------------------------------");System.out.println("size="+workplacedetailEntityList.size());System.out.println("workplacedetailEntityList="+workplacedetailEntityList);workplacedetailEntityList.remove(0);workplacedetailEntityList.stream().forEach(workplacedetailEntity -> {workplacedetailEntity.setStatus("0");if(null != dManagecomEntityList && dManagecomEntityList.size()>0){workplacedetailEntity.setSecondarycomcode(dManagecomEntityList.get(0).getProvincecomcode());workplacedetailEntity.setSecondarycomname(dManagecomEntityList.get(0).getProvincecomname());workplacedetailEntity.setTertiarycomcode(dManagecomEntityList.get(0).getBranchcode());workplacedetailEntity.setTertiarycomname(dManagecomEntityList.get(0).getBranchname());}this.insertOrUpdateWorkplacedetail(workplacedetailEntity);});}
好了,到这里就完成了。注意,本次是实现了后台接入字段名为file的file类型的参数和字段名为unicomcode的字符串参数。 如果仅仅需要一个file的话,那直接用file参数来接即可。
使用EasyExcel实现模板下载、数据导入功能相关推荐
- 【vue+springboot】excel模板下载、导入功能实现
基于VUE+SpringBoot实现excel模板下载.导入功能 背景 最近在工作中经常遇到批量导入的功能,而且前端还要提示导入成功几条.失败几条.哪一条数据重复.是哪一条导入的数据出现问题等,抽空写 ...
- 使用EasyExcel实现模板下载、导入和导出功能
最近项目中需要用到Excel表格的上传下载功能,于是选择了EasyExcel这款工具,总的来说非常的好用,下面就做一个简单的演示. 官方文档地址 https://www.yuque.com/easye ...
- 【自用】EasyExcel 表格模板下载及导入
工具类 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java ...
- excel模板下载和导入功能
一.模板下载 1. 将excel放在你项目的静态资源文件夹中 2. 在前端页面中创建一个按钮,并给一个点击事件(我这里用的是layui的模板) html按钮部分:这个地方可以改成自己的button按钮 ...
- EasyExcel通过模板导出数据
EasyExcel通过模板导出数据 大家好,这两天在做excel导出功能,使用的是easyExcel,不得不说其功能全面,很好入手. 但是在开发的过程中也会遇到一些文档里无法提供解决的问题,这里我分享 ...
- c#直接调用ssis包实现Sql Server的数据导入功能
调用ssis包实现Sql Server的数据导入功能网上已经有很多人讨论过,自己参考后也动手实现了一下,上一次笔者的项目中还用了一下这个功能.思前想后,决定还是贴一下增强记忆,高手请54. 1.直接调 ...
- EasyExcel使用模板填充数据导出遇到的坑
EasyExcel使用模板填充数据导出遇到的坑 1.最近需求涉及excel的导出,所以选择用阿里的EasyExcel框架来使用是比较方便的,这个框架封装了许多方法来供我们使用,比传统POI简单许多 2 ...
- 通用Excel数据导入功能模板
最近做了一个excel导入功能,思路很简单,给一个上传excel文件的入口,然后获取excel文件的sheet签和签中的数据,可以对数据对象进行业务处理,当然也可以数据存入数据库中 代码如下:jsp页 ...
- java(Springboot) excel模板下载、导入
一.java对excel模板的下载 首先在resources目录下 代码可以直接复制,标红的是你的excel表名.然后在浏览器输入连接http://xxxx:8610/cloud/basic/user ...
最新文章
- java虚拟机启动参数Xms,启动JVM时,-Xms和-Xmx参数是什么?
- BTCBCH 谁是最终的王者
- 2019考研的一些心得
- redis学习笔记(一): sds
- raft算法mysql主从复制_Raft算法赏析
- java版本号分段比较_Java实现比较版本号
- 关于 Taro 的 ScrollView 在Dom结构发生变化会自动回滚到顶部解决方案和原因
- C++还是Java常常无法想起数组
- 一起学习C语言:初步进入编程世界(三)
- keepalived实现双机备份
- node 报错 throw er; // Unhandled 'error' event 解决办法
- linux定时备份前一天,linux定时备份
- latex中设置标题左对齐
- 全Delphi代码实现安卓扫码程序
- coolie PK webpack 之三:模块构建
- 腾讯T4级架构师用21个项目带你吃透379页深度学习TensorFlow实践pdf
- 《林林数据结构笔记》线段树求数组区间和,单点更新,区间更新+lazy思想
- matlab二项式分布,C++ binomial_distribution二项式分布随机数用法解析
- python +appium实现原理_Appium+python自动化(四十)-Appium自动化测试框架综合实践 - 代码实现(超详解)...
- ARM CPU挂死和总线挂死的DS-5调试方法
热门文章
- Spring AOP 原理
- 设计模式-结构型模式讲解下(装饰者、外观、代理)
- Jetson AGX Orin上部署YOLOv5_v5.0+TensorRT8
- 点赋科技:智能饮品柜掀起未来智能零售新浪潮
- VS2019快捷键大全
- [PTA C语言]判断回文字符串——函数题
- 笔记本电脑显示计算机无法启动,笔记本电脑未能启动怎么回事_笔记本电脑显示windows未能启动如何解决-win7之家...
- java 骆驼命名_菜鸟笔记:java变量命名及峰驼式命名法
- 宋代民间私修家谱兴起的因素是什么?家谱内容有怎样的改变?
- 解决共享打印机出现0x00000709错误代码