根据NVeloDocx Word模板引擎生成Word(六-结束)

news/2025/1/15 12:24:20/

前面几篇已经把E6开发平台配套的Word模版隐藏NVeloDocx的基础用法介绍了一遍,这些基础用法基本上可以完全覆盖实际业务的绝大部分需求。所以我们这一篇就介绍一些边边角角的内容,给本系列来一个首尾。

本篇的主要内容有:

1、汇总计算:比如我们经常遇到的Word报告中的配件清单,需要能够计算总耗时,总费用等等;

2、E6脚本:基于NVeloDocx,我们同样可以使用E6脚本,比如使用E6脚本进行日期格式化,进行金额字段的小写数字转换成中文等等;

3、水印:水印也可以通过NVelocity命令进行填充;

下面我们来一个个进行介绍:

汇总计算:

比如我们在使用子表数据填充Word表格的时候,很多时候需要显示一个汇总行,甚至于某些情况下还需要把金额转换成大写形式,如下图:

子表最后一行是汇总行

那么我们怎么设置这个模板呢?还记得前面《根据NVeloDocx Word模板引擎生成Word(二)》中已经介绍过子表输出到Word表格时的模板语法,这里也是一样的,只不过要汇总我们必须要一个新变量(下图模版中的$total)来保存每个循环的叠加汇总。

 模版

变量的定义自然需要再循环开始前进行定义,所以我们在#foreach前定义变量#set($total=0)。

变量的汇总我们在#end前,先把要汇总的字段值取出来赋值给变量$baofei,也可以不用这么做,这么做的原因主要是让后面的汇总命令短一点,不易出错而已。所以下面两种写法都是对的:

第一种:就是上图中的这种:

#set($baofei=${child.GetValue($item,"baodanbaofei")})

#set($total=${utils.Add($total, $baofei)}) # 这里表示把total变量和保费变量相加后再复制给total

第二种直接相加(不建议这种方式)

#set($total=${utils.Add($total, ${child.GetValue($item,"baodanbaofei")})})

这里为了实现两个变量相加,我们引入了一个工具方法utils.Add(参数1,参数2),为什么要这么做呢?因为如果直接使用#set($total = $total + $baofei)的话,就可能失败,我总觉得这是NVelocity的一个Bug!!!

汇总后要把汇总金额转成大写,通过工具方法${utils.ToCapital($tatal)} 即可,如上面的模版图。


E6脚本

在NVeloDocx模版引擎中也可以使用E6脚本,最常见的比如显示当前日期,比如报告日期就可以使用E6脚本来实现:

报告日期 

模版如下:通过工具方法 ${script.Exc("Today()")} 来执行一个E6脚本,其中 "Today()"就是要执行的E6脚本。

模版 


水印:

比如要在生成的Word中显示水印信息,当前“用户名+用户编号”这种显然是一个动态的信息,就可以通过设置水印为E6脚本,生成Word时再进行动态计算。

 水印效果图

在Word中设置水印的方法:

设置中-水印菜单

 选择自定义水印

设置水印“文字”为E6脚本 

在水印设置时,就可以设置水印“文字”为执行E6脚本:

${script.Exc("UserName()+UserNO()")}

其中:

UserName():E6脚本,表示当前登录用户的姓名;

UserNO():E6脚本,表示当前登录用户编号;

这样生成的Word文档中,水印就会自动替换成当前操作用户的用户名+用户编号。

总算完结了,给有需要的朋友一个参考。


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

相关文章

JavaWeb开发中为什么Controller里面的方法是@RequestMapping?

在Java Web开发中,尤其是在使用Spring MVC框架时,RequestMapping注解被广泛应用于Controller层的方法上,这是因为RequestMapping是Spring MVC提供的一个核心注解,用于将HTTP请求映射到相应的处理器类或处理器方法上。通过这种方式…

如何动态获取路由上的参数

如何动态获取路由上的参数 在许多后端框架中,可以通过路由参数来动态获取URL中的参数。下面是一些常见的后端框架的示例代码: 1. Express.js (Node.js) app.get(/users/:userId, (req, res) > {const userId req.params.userId; // 获取路由参数…

1.使用 VSCode 过程中的英语积累 - File 菜单(每一次重点积累 5 个单词)

前言 学习可以不局限于传统的书籍和课堂,各种生活的元素也都可以做为我们的学习对象,本文将利用 VSCode 页面上的各种英文元素来做英语的积累,如此做有 3 大利 这些软件在我们工作中是时时刻刻接触的,借此做英语积累再合适不过&a…

69、Python番外篇:从编程范式看如何学习一门编程语言的精髓

引言 在之前的文章中,我们曾聊过如何学习一门编程语言,当时是从程序的构成的角度来分析、展开的,主要提及了数据的表达 数据的处理,也就是数据结构 算法的内容。这个角度对应到所有编程语言,基本都是适用的。但是&a…

利用AI驱动智能BI数据可视化-深度评测Amazon Quicksight(二)

简介 随着生成式人工智能的兴起,传统的 BI 报表功能已经无法满足用户对于自动化和智能化的需求,今天我们将介绍亚马逊云科技平台上的AI驱动数据可视化神器 – Quicksight,利用生成式AI的能力来加速业务决策,从而提高业务生产力。…

infoNCE损失和互信息的关系

文章目录 InfoNCE 损失与互信息的关系推导将相似度 sim ( q , x ) \text{sim}(q, x) sim(q,x) 看作是负的能量函数infoNCE和互信息的分母不同 InfoNCE 损失与互信息的关系推导 为了理解 InfoNCE 损失与互信息的关系,首先我们回顾两个公式的基本形式: 互…

【Android 13源码分析】WindowContainer窗口层级-1-初识窗口层级树

在安卓源码的设计中,将将屏幕分为了37层,不同的窗口将在不同的层级中显示。 对这一块的概念以及相关源码做了详细分析,整理出以下几篇。 【Android 13源码分析】WindowContainer窗口层级-1-初识窗口层级树 【Android 13源码分析】WindowCon…

【南方科技大学】CS315 Computer Security 【Lab2 Buffer Overflow】

目录 引言软件要求启动虚拟机环境设置禁用地址空间布局随机化(ASLR)设置编译器标志以禁用安全功能 概述BOF.ctestShellCode.c解释 createBadfile.c 开始利用漏洞在堆栈上查找返回地址 实验2的作业 之前有写过一个 博客,大家可以先看看栈溢出…