使用EasyPoi实现Excel的按模板样式导出

news/2024/12/23 5:33:11/

1,横向遍历

#fe

使用#fe命令可以实现集合数据的横向拓展,比如模板代码是

{{#fe:maths t.score}}

导出的excel里面就会显示会自当前列,向右拓展,效果可参见下面的导出文件截图

2,横向遍历值

v_fe

使用v_fe命令可以实现不固定列的横向遍历,比如模板代码是

分数ID
{{#fe:maths t.scoret.id}}

这种情况导出的excel就会两列一起向右拓展,效果可参见下面的导出文件截图

3,删除行

方法一:删除空白行

book.getSheetAt(0).removeRow(book.getSheetAt(0).getRow(12))

只是清空第13行内容,行还在

方法二:这行高度设为0

book.getSheetAt(0).getRow(12).setHeight((short)0);

推荐此方法,打印出来的效果就是看不到这行,对于打印功能来说足够了

方法三:shiftRows 删除后下方单元格上移

 book.getSheetAt(0).shiftRows(12,book.getSheetAt(0).getLastRowNum(),5);

api说明

 sheet.shiftRows(startRow,endRow,shiftCount)

参数说明:
startRow:移动的开始行号,从0开始计算, 如果想要删除Excel中的第8行(rownum=7),那么starRow设定为7,即设定为你想删除的那行
endRow: 移动的结束行号,从0开始计算。通过startRow和endRow选定移动的范围。可以用sheet.getLastRowNum:来取得sheet的结尾行号 shiftCount 移动多少行。正数是往下移动的行数,负数是往上移动的行数
这个方法也不能实现真正的删除行

4,日期格式

{{fd:(report_date;yyyy-MM-dd)}}

report_date就是new Date()
通过这个模板命令可以直接转换成想要的日期格式

5,保留几位小数

模板命令

{{#fe:chineses {{fn:(t.score;###.00)}}}}

两个0代表保留两位小数
如果是在sql中处理,那么可以使用round函数,记住一定要加别名

select round(score,2) scoreValue from table

如果是在代码中

String.format("%.2f",(double)(i+70)).toString()

详细代码


def main(){Map<String,Object> map = new HashMap()map.put("class_code","GRADE1")map.put("model","初三")map.put("report_date",new Date())map.put("sample_num",30)map.put("chinese_standard_value",90)map.put("math_standard_value",80)// 数学测试数据def res = []for(int i=0;i<20;i++){def data = ["id":i,"score":String.format("%.2f",(double)(i+70)).toString()]res.add(data)}map.put("maths",res.subList(0,8))map.put("maths"+"2",res.subList(8,16))map.put("maths"+"3",res.subList(16,res.size()))// 语文测试数据def res2 = []for(int i=0;i<20;i++){def data = ["id":i,"hello":i+"Hello","score":(i+80.2589).toString()]res2.add(data)}map.put("chineses",res2.subList(0,8))map.put("chineses"+"2",res2.subList(8,16))map.put("chineses"+"3",res2.subList(16,res2.size()))// return mapdef filePrefix = new Date().format("yyyyMMddHHmmss")def file = resFileGetter.getByName('1690342020350导出测试.xlsx');def templateUrl = file.getAbsolutePath();String sheetName = "班级成绩报告";TemplateExportParams params = excelApi.buildTmpExportParams(templateUrl,sheetName)params.setColForEach(true);def book = ExcelExportUtil.exportExcel(params, map);def fileName =  "班级成绩报告"+filePrefix+".xlsx"ExcelUtils.downLoadExcel(fileName, response, book);
}

模板文件

1690342020350导出测试.xlsx
在这里插入图片描述

导出文件

如下
在这里插入图片描述


http://www.ppmy.cn/news/981113.html

相关文章

MATLAB 利用RANSAC对多项式进行点拟合 (32)

MATLAB 利用RANSAC对多项式进行点拟合 (32) 一、算法介绍二、函数介绍三、算法实现四、效果展示一、算法介绍 通过对给定的一小组点进行抽样并生成多项式拟合,得到多项式系数 P。返回 maxRange 中具有最多 inlier 值的拟合。如果找不到匹配,则返回空的 P。该函数使用 M 估…

Redis 缓存机制介绍

.Redis 缓存 缓存&#xff08;cache&#xff09;&#xff0c;原始意义是指访问速度比一般随机存取存储器&#xff08;RAM&#xff09;快的一种高速存储器&#xff0c;通常它不像系统主存那样使用 DRAM 技术&#xff0c;而使用昂贵但较快速的 SRAM 技术。缓存的设置是所有现代计…

ADS仿真低噪声放大器学习笔记

ADS仿真低噪声放大器 设计要求&#xff1a; 工作频率&#xff1a;2.4~2.5GHz ISM频段 噪声系数&#xff1a;NF < 0.7 增益&#xff1a;Gain > 15 输入驻波输出驻波&#xff1a;&#xff1c;1.5 这里重点是ADS操作流程 1. 安装晶体管的库文件 1、 下载ATF54143晶体管的…

[Spark] 大纲

1、Spark任务提交流程 2、SparkSQL执行流程 2.1 RBO&#xff0c;基于规则的优化 2.2 CBO&#xff0c;基于成本的优化 3、Spark性能调优 3.1 固定资源申请和动态资源分配 3.2 数据倾斜常见解决方法 3.3 小文件优化 4、Spark 3.0 4.1 动态分区裁剪(Dynamic Partition Pr…

RNN架构解析——LSTM模型

目录 LSTMLSTM内部结构图 Bi-LSTM实现 优点和缺点 LSTM LSTM内部结构图 Bi-LSTM 实现 优点和缺点

Springboot @Async 多线程获取返回值

Springboot Async 多线程获取返回值 需求背景 最近需要用到多线程, 自己维护线程池很麻烦, 正好看到Springboot集成线程池的例子, 这里自己做了个尝试和总结, 记录一下, 也分享给需要的朋友; 不考虑事务的情况下, 这个多线程实现比较简单, 主要有以下几点: 在启动类加上Enab…

TDesign 中后台系统搭建

目录 1 模板安装2 启动项目3 添加页面总结 一般如果希望开发小程序&#xff0c;是要给使用的用户提供一套中后台系统来管理数据的。现在中后台系统开源项目也比较多&#xff0c;本篇我们介绍一个腾讯开源的TDesign模板。 1 模板安装 先要在电脑里安装好nodejs&#xff0c;搜索…

开发岗智力题集合

1 1000个人做核酸&#xff0c;有一个阳性&#xff0c;怎么快速查出来&#xff08;二分法、编码法 - 二进制位&#xff09; 首先我们整理一下题意&#xff0c;这里的快速查出来是指每个人都做完一次核酸后&#xff0c;使用的最少的核酸管的数量&#xff0c;这等同于求最少的检测…