springboot excel模板导出,springbootexcel导入导出

  springboot excel模板导出,springbootexcel导入导出

  Springboot Easyexcel将数据写入模板文件并导出ExcelJava解析、生成超过比较有名的框架有阿帕奇poi,jxl。但他们都存在一个严重的问题就是非常的耗内存,兴趣点有一套萨克斯管模式的应用程序接口可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版超过解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大easyexcel重写了夏威夷芋泥饼对07版超过的解析,一个3M的超过用POI sax解析依然需要100米左右内存,改用easyexcel可以降低到几m,并且再大的超过也不会出现内存溢出;03版依赖POI的萨克斯管模式,在上层做了模型转换的封装,让使用者更加简单方便。

  本文使用easyexcel对超过文件进行操作,来实现数据以超过形式导出的功能。

  需求背景:针对用户选择的数据,利用现有的超过模板,实现批量导出的功能。比如程序员也有类似的批量导出数据功能,这里需要导出时,按照模板文件的字段导出。

  现有模板字段:

  实现方式:springboot easyexcel一、导入依赖!龙目岛

  属国

  groupId组织。lombok/groupId项目

  artifactId lombok /artifactId

  /依赖关系

  !-操作超过工具包-

  属国

  groupId com.alibaba /groupId

  artifactId easyexcel /artifactId

  版本3 .0 .5/版本

  /依赖关系二、根据超过表头创建对应的实体类坡缕石实体类

  导入com。阿里巴巴。excel。注释。excel属性;

  进口龙目岛。数据;

  @数据

  公共类ExcelTitle {

  @ExcelProperty(value=事件名称索引=0)

  私有字符串事件名

  @ExcelProperty(value=需求负责人,索引=1)

  私有字符串prdManager

  @ExcelProperty(value=技术负责人指数=2)

  私有字符串技术经理

  @ExcelProperty(value=文档链接指数=3)

  私有字符串prdDocs

  @ExcelProperty(value=数据链接指数=4)

  私有字符串统计文档

  @ExcelProperty(value=统计口径指数=5)

  私有字符串报告口径这里采用了@ExcelProperty的注解,其中价值表示列名,索引表示列名的索引值。数据数据注解的主要作用是提高代码的简洁,使用这个注解可以省去代码中大量的get()、set()、toString()等方法;

  三、控制器类接收请求@ request mapping(value=/bulk output ,method=RequestMethod .获取)

  公共结果bean批量输出(http servlet响应响应){

  //重要!设置返回格式是超过形式

  回应。设置内容类型(应用程序/vnd。开放XML格式-office文档。电子表格ml。工作表’);

  //设置编码格式

  回应。setcharacterencoding(“utf-8”);

  //设置URLEncoder.encode防止中文乱码

  字符串文件名=空

  尝试{

  fileName=URLEncoder.encode(数据批量导出,‘UTF-8’).replaceAll(\\ , );

  //设置响应头

  回应。设置标题(内容-处置,附件;文件名*=utf-8 文件名。xlsx’);

  list ExcelTitle大容量输出数据=wildeventservice。getbulk输出数据();

  //模板文件保存在跳羚项目的资源/静态下

  资源resource=新的类路径资源( static/数据批量导出模板. xlsx’);

  excel writer=简易excel。写(回应。获取输出流())。使用模板(资源。getinputstream())//利用模板的输出流。build();

  //写入模板文件的第一个表索引0

  写表写表=简易excel。编写器工作表(0).build();

  //将数据写入到模板文件的对应表中

  excel writer。写(批量输出数据,写表);

  excel writer。finish();

  } catch(UnsupportedEncodingException e){

  返回结果bean。errorservice(e . getmessage());

  } catch (IOException e) {

  返回结果bean。errorservice(e . getmessage());

  }

  返回ResultBean.success(数据导出成功!);

  }在上面的代码中,首先设置了响应,包括返回类型、响应头以及导出和下载时的文件名。接下来,使resource resource的xlsx=new class path resource( static/data批量导出template . xlsx );读取项目下的模板文件,调用easyexcel的编写方法。这里write(response.getOutputStream())表示写入response的输出流,即文件返回给客户端下载。with template(resource . getinputstream())表示读取模板文件进行写入。最后调用write sheet write sheet=easy excel . write sheet(0)。build();将Su Ju写入模板文件的第一页(索引从0开始)。

  四。服务层获取要写入的数据。这里,为了简单起见,一些数据被构造如下

  导入com . example . demo . POJO . excel title;

  导入org . spring framework . stereotype . service;

  导入Java . util . ArrayList;

  导入Java . util . list;

  @服务

  公共类BulkOutputService {

  公共列表ExcelTitle getOutputData(){

  list ExcelTitle result list=new ArrayList();

  //第一行数据

  excel title t1=new excel title();

  T1.setEventName(测试数据1 );

  T1.setTechManager(张三);

  T1.setPrdManager(张三);

  t1 . setprddocs( http://prddocs . com );

  t1 . setstatsdocs( http://statsdocs . com );

  t1 . setreportcaliber( report caliber );

  //第二行数据

  excel title T2=new excel title();

  T2.setEventName(测试数据2 );

  T2.setTechManager(李四);

  T2.setPrdManager(李四);

  T2 . setprddocs( http://prddocs . com );

  T2 . setstatsdocs( http://statsdocs . com );

  T2 . setreportcaliber( report caliber );

  result list . add(t1);

  result list . add(T2);

  返回结果列表;

  }

  }这里构造了两行简单的数据。在实际场景中,只需要根据自己的数据进行替换即可。

  通过以上步骤,您可以执行代码来检查导出效果。

  显示效果启动springboot程序并在浏览器中输入请求:http://localhost:8080/bulkOutput。可以发现返回的excel文件已经被浏览器下载了。打开后,内容如下:

  可以看到,数据是按照模板格式写入文件,并以excel的形式导出的。我们初步完成了预定场景。

  这个汇总的功能是利用已有的模板批量导出数据到excel,借助easyexcel实现操作excel的功能。最重要的功能模块是控制器中的内容。

  需要注意的是

  当需要response的response type和response header来使return request返回excel文件到Web流时,这里的ContentType和CharacterEncoding不能乱码,否则容易乱码或者文件损坏。使用EasyExcel.withTemplate引入模板的输入流。

  版权归作者所有:原创作品来自博主、程序员,转载请联系作者获得授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: