jxls 2.4.5 —— 动态导出excel 表头与数据

文章目录

  • 前言
  • 依赖引入
  • 制作导出模板
  • 测试类
  • 导出效果
  • 注意事项

前言

再之前的博客中,介绍了jxls的基础使用。但导出表头属于写死的,并未采取动态渲染。

本次进行动态渲染操作,动态渲染表头和填充数据。

依赖引入

springboot测试项目中,引入下列依赖以及版本。

<dependency><groupId>org.jxls</groupId><artifactId>jxls</artifactId><version>2.4.5</version>
</dependency>
<dependency><!-- 可以使用poi的实现也可以用jexcelapi的 --><groupId>org.jxls</groupId><artifactId>jxls-poi</artifactId><version>1.0.15</version>
</dependency>
<dependency><groupId>org.jxls</groupId><artifactId>jxls-jexcel</artifactId><version>1.0.7</version>
</dependency>
<dependency><groupId>net.sf.jxls</groupId><artifactId>jxls-core</artifactId><version>1.0.6</version>
</dependency>

制作导出模板

导出模板依旧采取批注的方式,进行定义内容范围表头区域数据区域
在这里插入图片描述
A1中的批注如下:

jx:area(lastCell=”A3”)

指定一条数据填充时的范围

A2中的批注如下:

jx:grid(lastCell=“A3” headers=“hDatas” data=“bDatas” areas=[A2:A2, A3:A3] formatCells=“BigDecimal:C1,Date:D1”)

headers 指定哪个list集合属于动态表头数据。
data 指定使用哪个数据集合作为数据渲染源。
areas 指定表头和数据的范围。A2:A2 表示 表头数据的区域。A3:A3 表示 第一个数据单元格所在的区域。
formatCells 官方文档说的是指定数据格式,测试时不属于必填项

测试类

package cn.xj.controller;import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import java.io.*;
import java.util.*;@Slf4j
public class Test3 {public static void main(String[] args) throws Exception {//Map<String, Object> map = new HashMap();Context context = new Context();// 动态头context.putVar("hDatas", Arrays.asList("编号","名称","年龄","邮箱"));// 数据集合List<List<Object>> dataList = Lists.newArrayList();for (int i = 0; i < 10; i++) {List<Object> list = new ArrayList<>();Map<String, Object> params = new HashMap<>();list.add("1_"+i);list.add("xj_"+i);list.add(22);list.add("专注写bug测试中文");dataList.add(list);}// ${item.num}context.putVar("bDatas",dataList);Resource resource = new ClassPathResource("/report/test_user2.xlsx");InputStream is = resource.getInputStream();String outFile = System.getProperty("user.dir")+ File.separator+"springboot-poi"+File.separator+"pdf"+File.separator+System.currentTimeMillis()+ ".xlsx";OutputStream outputStream = new FileOutputStream(outFile);JxlsHelper.getInstance().processTemplate(is, outputStream, context);}}

导出效果

在这里插入图片描述

注意事项

  • 1、表头的数据格式为List<String>
  • 2、数据部分的格式为List<List<Object>>。或者List<xxxxPo>,但第2种数据格式暂未进行验证。
  • 3、使用动态表头方式,必须使用org.jxls.common.Context来承接数据信息。

Context context = new Context();
// 动态头
context.putVar(“hDatas”, Arrays.asList(“编号”,“名称”,“年龄”,“邮箱”));
// 数据集合
List<List> dataList = Lists.newArrayList();
context.putVar(“bDatas”,dataList);

  • 4、表头与数据单元格部分,必须强制使用${header}${cell}。自定义命名会导致数据不会填充!
    在这里插入图片描述
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/459678.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

canvas实现涂鸦画板功能

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

【每日一题】LeetCode——链表的中间结点

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

C#,字符串相似度的莱文斯坦距离(Levenshtein Distance)算法与源代码

一、莱文斯坦&#xff08;Levenshtein&#xff09; Vladimir I. Levenshtein 弗拉基米尔I列文施坦博士是纠错码理论的先驱&#xff0c;被称为俄罗斯编码理论之父。Levenshtein是莫斯科俄罗斯科学院Keldysh应用数学研究所的研究教授&#xff0c;他的贡献体现在消费者的日常生活中…

【网络技术】【Kali Linux】Nmap 嗅探(一)简单扫描

一、实验环境 本次实验进行简单的Nmap扫描&#xff0c;实验使用 Kali Linux 虚拟机和 Ubuntu Linux 虚拟机完成&#xff0c;主机操作系统为 Windows 11&#xff0c;虚拟化平台选择 Oracle VM VirtualBox&#xff0c;如下图所示。 二、实验步骤 1、相关配置 Kali Linux 虚拟机…

10个简单有效的编辑PDF文件工具分享

10个编辑PDF文件工具作为作家、编辑或专业人士&#xff0c;您可能经常发现自己在处理 PDF 文件。无论您是审阅文档、创建报告还是与他人共享工作&#xff0c;拥有一个可靠的 PDF 编辑器供您使用都非常重要。 10个简单适用的编辑PDF文件工具 在本文中&#xff0c;我们将介绍当今…

Verilog刷题笔记23

题目: Suppose you’re building a circuit to process scancodes from a PS/2 keyboard for a game. Given the last two bytes of scancodes received, you need to indicate whether one of the arrow keys on the keyboard have been pressed. This involves a fairly simp…

2/7 算法每日N题(二分+双指针)

第一题&#xff1a; class Solution { public:int search(vector<int>& nums, int target) {int left 0, right nums.size() - 1;while(left < right){int mid (right - left) / 2 left;int num nums[mid];if (num target) {return mid;} else if (num >…

React | Center 组件

在 Flutter 中有 Center 组件&#xff0c;效果就是让子组件整体居中&#xff0c;挺好用。 React 中虽然没有对应的组件&#xff0c;但是可以简单封装一个&#xff1a; index.less .container {display: flex;justify-content: center;align-items: center;align-content: ce…

Pandas 对带有 Multi-column(多列名称) 的数据排序并写入 Excel 中

Pandas 从Excel 中读取带有 Multi-column的数据 正文 正文 我们使用如下方式写入数据&#xff1a; import pandas as pd import numpy as npdf pd.DataFrame(np.array([[10, 2, 0], [6, 1, 3], [8, 10, 7], [1, 3, 7]]), columns[[Number, Name, Name, ], [col 1, col 2, co…

DIFFER,一种用于测试和验证转换程序的新工具

我们最近发布了一个新的差异测试工具&#xff0c;称为 DIFFER&#xff0c;用于查找转换后的程序中的错误和健全性违规。 DIFFER 结合了差分、回归和模糊测试的元素&#xff0c;帮助用户发现被软件重写、反膨胀和强化工具更改的程序中的错误。我们使用 DIFFER 评估了 10 个软件反…

数据库管理-第147期 最强Oracle监控EMCC深入使用-04(20240207)

数据库管理147期 2024-02-07 数据库管理-第147期 最强Oracle监控EMCC深入使用-04&#xff08;20240207&#xff09;1 发现Exadata2 Exadata监控计算节点&#xff1a;存储节点RoCE交换机管理交换机PDU 总结 数据库管理-第147期 最强Oracle监控EMCC深入使用-04&#xff08;202402…

Oracle 面试题 | 18.精选Oracle高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…