这里是在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实现模板下载、数据导入功能相关推荐

  1. 【vue+springboot】excel模板下载、导入功能实现

    基于VUE+SpringBoot实现excel模板下载.导入功能 背景 最近在工作中经常遇到批量导入的功能,而且前端还要提示导入成功几条.失败几条.哪一条数据重复.是哪一条导入的数据出现问题等,抽空写 ...

  2. 使用EasyExcel实现模板下载、导入和导出功能

    最近项目中需要用到Excel表格的上传下载功能,于是选择了EasyExcel这款工具,总的来说非常的好用,下面就做一个简单的演示. 官方文档地址 https://www.yuque.com/easye ...

  3. 【自用】EasyExcel 表格模板下载及导入

    工具类 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java ...

  4. excel模板下载和导入功能

    一.模板下载 1. 将excel放在你项目的静态资源文件夹中 2. 在前端页面中创建一个按钮,并给一个点击事件(我这里用的是layui的模板) html按钮部分:这个地方可以改成自己的button按钮 ...

  5. EasyExcel通过模板导出数据

    EasyExcel通过模板导出数据 大家好,这两天在做excel导出功能,使用的是easyExcel,不得不说其功能全面,很好入手. 但是在开发的过程中也会遇到一些文档里无法提供解决的问题,这里我分享 ...

  6. c#直接调用ssis包实现Sql Server的数据导入功能

    调用ssis包实现Sql Server的数据导入功能网上已经有很多人讨论过,自己参考后也动手实现了一下,上一次笔者的项目中还用了一下这个功能.思前想后,决定还是贴一下增强记忆,高手请54. 1.直接调 ...

  7. EasyExcel使用模板填充数据导出遇到的坑

    EasyExcel使用模板填充数据导出遇到的坑 1.最近需求涉及excel的导出,所以选择用阿里的EasyExcel框架来使用是比较方便的,这个框架封装了许多方法来供我们使用,比传统POI简单许多 2 ...

  8. 通用Excel数据导入功能模板

    最近做了一个excel导入功能,思路很简单,给一个上传excel文件的入口,然后获取excel文件的sheet签和签中的数据,可以对数据对象进行业务处理,当然也可以数据存入数据库中 代码如下:jsp页 ...

  9. java(Springboot) excel模板下载、导入

    一.java对excel模板的下载 首先在resources目录下 代码可以直接复制,标红的是你的excel表名.然后在浏览器输入连接http://xxxx:8610/cloud/basic/user ...

最新文章

  1. java虚拟机启动参数Xms,启动JVM时,-Xms和-Xmx参数是什么?
  2. BTCBCH 谁是最终的王者
  3. 2019考研的一些心得
  4. redis学习笔记(一): sds
  5. raft算法mysql主从复制_Raft算法赏析
  6. java版本号分段比较_Java实现比较版本号
  7. 关于 Taro 的 ScrollView 在Dom结构发生变化会自动回滚到顶部解决方案和原因
  8. C++还是Java常常无法想起数组
  9. 一起学习C语言:初步进入编程世界(三)
  10. keepalived实现双机备份
  11. node 报错 throw er; // Unhandled 'error' event 解决办法
  12. linux定时备份前一天,linux定时备份
  13. latex中设置标题左对齐
  14. 全Delphi代码实现安卓扫码程序
  15. coolie PK webpack 之三:模块构建
  16. 腾讯T4级架构师用21个项目带你吃透379页深度学习TensorFlow实践pdf
  17. 《林林数据结构笔记》线段树求数组区间和,单点更新,区间更新+lazy思想
  18. matlab二项式分布,C++ binomial_distribution二项式分布随机数用法解析
  19. python +appium实现原理_Appium+python自动化(四十)-Appium自动化测试框架综合实践 - 代码实现(超详解)...
  20. ARM CPU挂死和总线挂死的DS-5调试方法

热门文章

  1. Spring AOP 原理
  2. 设计模式-结构型模式讲解下(装饰者、外观、代理)
  3. Jetson AGX Orin上部署YOLOv5_v5.0+TensorRT8
  4. 点赋科技:智能饮品柜掀起未来智能零售新浪潮
  5. VS2019快捷键大全
  6. [PTA C语言]判断回文字符串——函数题
  7. 笔记本电脑显示计算机无法启动,笔记本电脑未能启动怎么回事_笔记本电脑显示windows未能启动如何解决-win7之家...
  8. java 骆驼命名_菜鸟笔记:java变量命名及峰驼式命名法
  9. 宋代民间私修家谱兴起的因素是什么?家谱内容有怎样的改变?
  10. 解决共享打印机出现0x00000709错误代码