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

2023-11-09

模板文件

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

导出文件

如下
在这里插入图片描述

1,横向遍历

#fe

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

{{#fe:maths t.score}}

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

2,横向遍历值

v_fe

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

分数 ID
{{#fe:maths t.score t.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()

6,换行显示

由于easypoi无法直接实现换行显示list数据,所以只能曲线救国,知道每行显示多少个后,在代码里对list进行截取,在模板里每行使用不同的list

		map.put("maths",res.subList(0,8))
        map.put("maths2",res.subList(8,16))
        map.put("maths3",res.subList(16,res.size()))

详细代码


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 map
        def 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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用EasyPoi实现Excel的按模板样式导出 的相关文章

  • 在 VBA 中使用 getElementsByClassName

    我正在使用此代码从页面获取产品名称 页面代码是 div class product shop col sm 7 div class product name h1 Claro Glass 1 5 L Rectangular Air Tigh
  • 选择在 Excel 宏(VBA 中的范围对象)中具有值的列

    如何修改 VBA 中的这一行以仅选择具有值的列 Set rng Range A1 Range A65536 End xlUp SpecialCells xlCellTypeVisible 我不认为我做的事情是正确的CountLarge财产是
  • 我需要代码在两行之间复制并粘贴到另一张表中,并给出任何值?

    例如 我有 50 行数据 第一行有学生的名字 我需要代码将数据从 RAM 复制到 RAMESH 在这之间我有 20 行 我需要代码来复制行并将其粘贴到另一张纸中 它不应该问我名字 默认情况下 它必须采用 RAM 和 RAMESH 名称 好的
  • 如何使用 VBA 将 mm/dd/yyyy 更改为 dd/mm/yyyy

    我在使用 VBA 将 mm dd yyyy 转换为 dd mm yyyy 日期格式时遇到问题 我有一个这样的表 仅供参考 该表是从报告工具自动生成的 字符串操作 或任何 Excel 函数可以提供帮助吗 希望知道如何解决这个问题的人可以给我一
  • 在 VBA 中循环合并单元格

    是否可以循环遍历合并的单元格vba questions tagged vba 我的范围内有 6 个合并单元格B4 B40 我只需要这 6 个单元格中的值 6 次迭代 上面的答案看起来已经让你排序了 如果您不知道合并的单元格在哪里 那么您可以
  • EPPlus Excel 行高不一致

    我已经使用 EPPlus 生成了一个 excel 文件 在 MS Office 2007 中一切似乎都很完美 但客户端使用的是 MS Office 2010 2013 并且在第 29 行之后未设置行高 这是一个非常奇怪的问题 我已经尝试了
  • 根据单元格值向用户窗体添加复选框

    我对 VBA 很陌生 只有 3 天 但我发现它非常有用且易于使用 但现在我面临一个问题 我需要制作一个具有不同复选框的用户窗体 但我需要根据工作表某一列中使用的信息自动添加它们 我相信我可以使用 For Each Next 但我真的不知道如
  • 在组合框中显示可见工作表

    您好 我有以下代码来在组合框中显示工作表 创建工作表后 工作表会自动添加到列表中 我不希望隐藏的工作表在保管箱中可见 我怎么做 Option Explicit Private Sub ComboBox1 Change If ComboBox
  • 使用 MID、LEN 和 FIND 函数提取单元格文本的某些部分?

    我有一份 Excel 作业 但我陷入了最后部分 我被要求使用 MID LEN 和 FIND 来提取单元格内的特定字符串 我非常了解每个人的工作方式 将这三者结合起来并让它们发挥作用是我遇到的问题 我需要将城市与地址的其余部分分开 然后将其显
  • 在 Node.js 中解析 Json(带有数组和对象)并将数据导出到 Excel 文件中

    我是 Node js 新手 我的要求是 我需要解析 JSON 并将数据导出到 Excel 文件中 其中包含 JSON 中的所有字段 我的 JSON 如下 id 1255 title The Brain and Nervous System
  • 如果总和为 0,则查找并删除带标题的最后一列

    我想创建一个宏 查找带有标题的最后一列 并仅当该列的总和等于零时才将其删除 到目前为止 这是我尝试过的 Dim LastCol As Long Dim i As Long With ThisWorkbook Sheets Sheet1 Fo
  • Excel 工作表名称的有效字符

    在 Java 中 我们使用以下包以编程方式创建 Excel 文档 org apache poi hssf 如果您尝试设置工作表的名称 不是文件 而是内部 Excel 工作表 在以下情况下您将收到错误消息 名称超过 31 个字符 该名称包含以
  • Redim Preserve 给出“下标超出范围”

    我想要Redim Preserve一个数组我不断收到错误 下标超出范围 我知道只有最后一个维度的大小可以更改 这正是我正在做的事情 这里出了什么问题 数组的类型是Variant BmMatrix Sheets BENCH Range a60
  • 如何通过电子邮件发送 Excel 文件?

    我有一个 excel 文件 Excel 2003 xls 格式 我想用 c 通过电子邮件发送它 我的代码成功发送它 但是当我尝试打开响应文件时 它似乎编码错误 例如 这里是响应文件名 utf 8 B RWxzesOhbW9sw6FzXzIw
  • 使用 ClosedXML 创建数据透视表

    我正在尝试使用 ClosedXML V0 91 1 创建数据透视表 但我不断遇到问题 因为我的 Excel 文件包含不可读的内容 然后 Excel 工作簿在单击时删除了我的数据透视表Yes below 下面是我击中时的显示Yes 它正在删除
  • Excel - 在一列中查找重复项,然后将数量求和到另一列中?

    查找一列中的重复项 然后将数量求和到另一列中 https i stack imgur com AADjd png DATA RESULT A 1 A 11 A 1 B 7 A 9 C 5 B 2 D 4 B 2 E 8 B 3 C 5 D
  • HTML/VBA Click 事件未触发

    这是我第一次在 StackOverflow 上发布问题 到目前为止 我已经能够通过 VBA 帮助论坛解决我的大部分问题 我的问题很简单 我有一个自动数据拉取 我需要在其中导出数据 我过去曾在这方面取得过成功 但这次略有不同 我尝试单击以生成
  • 跳过行:将数据从 SSIS 导出到 Excel 文件

    我正在尝试使用 SSIS 将数据从 SQL Server 数据库导出到 Excel 文件中 我希望从第 6 行插入数据 第 5 行有标题 我可以映射标题名称Excel 目标编辑器 通过编写 SQL 命令到 SQL 表头 SELECT FRO
  • 将 Excel 文件读入 R 并锁定单元格

    我有一个 Excel 电子表格要读入 R 它受密码保护并锁定了单元格 我可以使用 excel link 导入受密码保护的文件 但我不知道如何解锁 取消保护单元格 excel link 给了我这个错误 gt
  • 如何使用 php 将 *.xlsb 转换为数组或 *.csv

    我正在尝试转换 xlsb文件到php array or csv文件 或至少 xls 我尝试使用PHPExcel 但看起来它无法识别该文件中的内容 我注意到 你可以重命名 xlsb文件到 zip文件 然后使用命令行解压缩unzip zip 之

随机推荐

  • [游戏开发][Unity]点击Play按钮后卡死很久

    一般小工程不会遇到这个问题 我在公司接手了几个老项目 都遇到了这个问题 每次Play卡顿几分钟甚至十几分钟 很是头疼 原因大概率就是下图 Packing Sprite Atlases 打包纹理图集 Windows上的Unity项目经常不显示
  • 【分治法】中位数问题和Gray码问题——武汉理工大学算法设计与分析课程实验

    1 中位数问题 问题描述 设X 0 n 1 和Y 0 n 1 为两个数组 每个数组中含有n个已排好序的数 找出X和Y的2n个数的中位数 编程任务 利用分治策略试设计一个O log n 时间的算法求出这2n个数的中位数 数据输入 由文件inp
  • UML建模详解

    摘要 本教程简要介绍了统一建模语言 面向对象问题解决的核心是构建一个模型 该模型从其通常复杂的现实世界中抽象出基本问题的基本细节 几个建模工具被包裹在UML 的标题下 代表统一建模语言 本课程的目的是介绍UML的重要亮点 UML的中心是我们
  • 二十二. Kubernetes ResourceQuota配额限制与LimitRanger限制范围

    目录 一 ResourceQuota 资源限制基础解释 二 LimitRanger 一 ResourceQuota 资源限制基础解释 官方文档 ResourceQuota 是k8s中对每个命名空间资源消耗总量提供的一种限制 可以限制指定命名
  • 基于STM32F407的SDCard读写操作

    基于STM32F407的SDCard读写操作 目录 基于STM32F407的SDCard读写操作 硬件电路 SD卡结构示意图 管脚连接 SDIO方式 SDCard初始化 SDCacr寄存器介绍 SDCacr初始化代码 在之前没有做过SD卡相
  • 解神者x2服务器维护,解神者X2服务器维护中? 登不上与连网失败解决攻略

    解神者X2连网失败怎样解决 等待开放测试 才能顺利加入 创意手游小编带来测试详情 应对线上挑战 登不上与连网失败解决攻略 星辰跃迁测试预下载已开启 测试时间为 7月29日10 00 8月5日16 00 欢迎大家登船 测试类型 不限量 删档
  • 使用DLL在多个进程间共享全局变量

    默认情况下 同一个程序启动多个进程 它们各自的变量值是不会相互影响的 第二个实例启动后 在修改全局变量的时候 系统会运用内存管理系统copy on write的特性来防止修改了第一个实例的数据 即系统会再分配一些内存 并将全局变量复制到这块
  • c语言中 文件,c语言中文件的使用方法

    c语言中文件的使用方法 一 文件指针的定义 FILE fp 注意FILE的大写 二 文件的打开 fp fopen 路径 文件名 文件格式后缀 文件的使用方法 注意路径下为 而不是 三 文件的使用方法 1 r 模式 1 1 打开文件进行只读操
  • ansible 一键部署 kubernetes高可用框架

    ansible 一键部署 kubernetes高可用框架 kube router版 分享一个自己写的k8s搭建项目 github https github com Fear2014 kubernetes ansible deploy 框架说
  • 2021-06-10

    NFS Network File System 网络文件系统 是FreeBSD支持的文件系统中的一种 它允许网络中的计算机 不同的计算机 不同的操作系统 之间通过TCP IP网络共享资源 主要在unix系列操作系统上使用 在NFS的应用中
  • Android开发插件化来龙去脉(附全套学习视频)(1),app架构图

    Step3 通过反射获取到pluginClassLoader中的pathList字段 Object pluginDexPathList ReflectUtil getField BaseDexClassLoader class plugin
  • pyltp实现NER以及实体统计

    pyltp实现NER以及实体统计 人工智能火热 NLP技术也蓬勃发展 今天主要讲述NLP中的一项基础任务NER的实现 首先介绍一下NER 命名实体识别 Named entity recognition 是NLP的一项子任务 旨在实现从文本中
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 目标跟踪(1)SORT Windows实战+代码解析

    1 Windows实战 下载代码 解压文件 安装SORT所需的环境 进入到sort环境下 pip install r requirements txt 有两种使用方式 1 不基于视频 python sort py 2 基于视频 先下载视频
  • V神入围时代杂志2021年100位最具影响力人物名单

    人们的目光总是会关注那些与众不同的 天才 很多孩子少年时展现天赋 但长大之后有些不尽如人意 让人忍不住 伤仲永 不过有些天才 却一直在 神坛 上让人仰望 9月15日晚上 时代 杂志正式公布了2021年最具影响力100人名单 以太坊创始人Vi
  • python 通达信自动下载收盘和财务数据

    python 通达信自动下载收盘和财务数据 自动启动通达信 鼠标自动操作 通达信直接从官网下载免费版 可下载财务数据 自动识别屏幕尺寸 目前为1440x900 1920x1080 1366 768 三种 代码 try 下面需替换为自己电脑上
  • Vue vue.config.js 的详解与配置

    Vue的 vue config js 配置 1 为什么要配置 vue config js 由于 vue cli 3 也学习了 rollup 的零配置思路 所以项目初始化后 没有了以前熟悉的 build 目录 也就没有了 webpack ba
  • 我的世界服务器怎么开维修,我的世界服务器怎么开?

    我的世界服务器游戏规则指令 详细 1 achievement give 玩家名 用于赐予玩家成就 2 blockdata 用于编辑指定坐标的数据标签 3 clear 物品 数据 清空该玩家的物品栏 或只清除特定的物品 4 difficult
  • 在eclipse中使用MyBatisGenerator方法

    方法一 1 直接在pom xml文件中引入mybatis generator maven plugin
  • 使用EasyPoi实现Excel的按模板样式导出

    模板文件 1690342020350导出测试 xlsx 导出文件 如下 1 横向遍历 fe 使用 fe命令可以实现集合数据的横向拓展 比如模板代码是 fe maths t score 导出的excel里面就会显示会自当前列 向右拓展 效果可