当前位置: 首页 > news >正文

Springboot——jxls实现同sheet多个列表展示

文章目录

  • 前言
  • 制定模板
    • 1、限定模板数据的范围
    • 2、设定报表展示项
  • 编写测试类
    • 1、将xls模板文件放于 resource 下的 doc文件夹中
    • 2、导入依赖文件
    • 3、编写接口和导出逻辑
  • 效果预览
  • 结论

前言

在之前的博客中Springboot——使用jxls实现excel模板导出excel,具体说明了jxls框架的基本使用。

除了最简单的单列表展示外,jxls还具有同sheet页展示多个列表的能力,接下来一起继续探究。

制定模板

1、限定模板数据的范围

采取下面的批注,指定需要渲染显示的报表范围。

这里的范围只考虑第一行的范围!

命令如下所示:

jx:area(lastCell=”H15”)

在这里插入图片描述

2、设定报表展示项

报表一,只显示单条数据。
在这里插入图片描述

报表二,进行列表展示,并设置批注,如下所示:

jx:each(items="dataList2" var="item" lastCell="C8")

在这里插入图片描述
报表三,与报表二中的批注一样,只是接收参数变量名不同。批注如下所示:

jx:each(items="dataList3" var="item" lastCell="C12")

编写测试类

1、将xls模板文件放于 resource 下的 doc文件夹中

在这里插入图片描述

2、导入依赖文件

<!-- excel 填充 -->
<dependency><groupId>org.jxls</groupId><artifactId>jxls</artifactId><version>2.8.1</version>
</dependency>
<dependency><groupId>net.sf.jxls</groupId><artifactId>jxls-core</artifactId><version>1.0.6</version>
</dependency>
<dependency><groupId>org.jxls</groupId><artifactId>jxls-poi</artifactId><version>2.8.1</version>
</dependency>

3、编写接口和导出逻辑

@RequestMapping("/ss")
public void download(HttpServletRequest request,HttpServletResponse response) throws Exception {Map<String, Object> map = new HashMap();map.put("name1","xiangjiao");map.put("age1","10");map.put("are1","中国");// 报表二List<Map<String, Object>> dataList = new ArrayList();for (int i = 0; i < 10; i++) {Map<String, Object> params = new HashMap<>();params.put("name2","1_"+i);params.put("age2","xj_"+i);params.put("are2",22);dataList.add(params);}// ${item.num}map.put("dataList2",dataList);// 报表三List<Map<String, Object>> dataList3 = new ArrayList();for (int i = 0; i < 10; i++) {Map<String, Object> params = new HashMap<>();params.put("name2","1_"+i);params.put("age2","xj_"+i);params.put("are2",22);dataList3.add(params);}// ${item.num}map.put("dataList3",dataList3);export(map,"test.xls","666.xls",response);
}public static void export(Map<String, Object> dataMap, String reportName,String fileName, HttpServletResponse response) throws IOException {Resource resource = new ClassPathResource("/doc" +File.separator+ reportName);InputStream in = resource.getInputStream();// 这里的context是jxls框架上的context内容Context context = PoiTransformer.createInitialContext();context.toMap().putAll(dataMap);Workbook workbook = WorkbookFactory.create(in);// Changing name of the first sheetworkbook.setSheetName(0, "sheet1");PoiTransformer transformer = PoiTransformer.createTransformer(workbook);OutputStream out = response.getOutputStream();transformer.setOutputStream(out);// 文件名 - 解决中文乱码问题String filename = URLEncoder.encode(fileName, "UTF-8");// 设置响应编码response.setCharacterEncoding("UTF-8");response.setContentType("application/x-download");response.setHeader("Content-Disposition", "attachment;filename=" + filename);JxlsHelper.getInstance().processTemplate(context, transformer);in.close();out.flush();out.close();
}

效果预览

在这里插入图片描述

结论

jxls能够完美的实现样式自定义单数据多报表集成。

http://www.lryc.cn/news/186572.html

相关文章:

  • 分布式软件架构——服务端缓存的三种属性
  • Flink之Watermark策略代码模板
  • ubuntu 安装postgresql,增加VECTOR向量数据库插件 踏坑详细流程
  • 基于Springboot实现影视影院订票选座管理系统【项目源码+论文说明】分享
  • mysql批量插入数据,跳过唯一索引报错
  • 论文阅读--Energy efficiency in heterogeneous wireless access networks
  • Redis的C客户端(hiredis库)使用
  • 光引擎、光模块、光器件之间的关系和区别
  • 【办公-excel】两个时间相减 (二) - 带毫秒的时间进行相减操作
  • 二次封装View Design的table组件,实现宽度自适应,内容在一行展示
  • Node.js代码漏洞扫描工具介绍——npm audit
  • node.js知识系列(3)-每天了解一点
  • Zabbix监控系统 自定义监控项、自动发现与自动注册
  • Python信号之分享
  • 环信web、uniapp、微信小程序SDK报错详解---登录篇
  • DAZ To UMA⭐五.模型在Blender中的配置教程
  • 网络安全工具汇总
  • day-65 代码随想录算法训练营(19)图论 part 04
  • C++ - 完美语义(右值引用的中篇) - lambda表达式
  • 常见排序算法详解
  • 监控搭建-Prometheus
  • 指纹浏览器开发指南-EasyBR
  • qml入门
  • 一文熟练使用python修改Excel中的数据
  • java Spring Boot在配置文件中关闭热部署
  • 【物联网】Arduino+ESP8266物联网开发(一):开发环境搭建 安装Arduino和驱动
  • 自定义UI对象转流程节点
  • P1-P5_动手学深度学习-pytorch(李沐版,粗浅的笔记)
  • Android Studio修改模拟器AVD Manger目录
  • STM32--MQ2烟雾传感器