联系
我们

工作日 9:00-18:00

13632615190

数据及辅助方法概述

NVeloDocx是基于NVelocity和OpenXml的Word模版引擎,所以遵循NVelocity的语法,但是要求上更为严格。要能够根据Word模板自动填充Word报告,那么我们必然是要传入一些参数的,默认我们提供了一下参数:


1、data

表示正在导出的这一条数据,这是E6用于描述某条表单数据的数据结构,使用方法有:

${data.GetValue("数据库字段名")}

${data.GetValue("引用单据ID1\\引用单据ID2\\数据库字段名")}

知识点:如果取引用单据数据,则单据ID和字段之间要用双斜杠。为什么要用双斜杠“\\”呢?因为在NVelocity中(甚至是在C#,Java等主流编程语言中),但斜杠“\”一般表示转义符,如果只填单斜杠,则取数时将会报错。


2、utils

工具类,提供在导出Word时的一些常用方法,比如要把某个金额转成大写可用这么写:${utils.ToCapital("123.45")} 则会返回“壹佰贰拾叁元四角五分”,关于utils的详细介绍,后面会有单独的章节。

日期格式化

${utils.DateFmt("日期值","格式化字符串")}

将日期值按格式化字符串进行格式化,如:${utils.DateFmt("2024-01-01","yyyy年MM月dd日")} 返回“2024年01月01日”。


${utils.Money("数值")}

返回千分位的金额字符串,如: ${utils.Money("1234567.89")} 返回“1,234,567.89” 。


${utils.Round("数值")}

四舍五入,如:${utils.Round("123.456")} 返回“123.46”。


${utils.SplitStr("原始字符串", "分隔符")}

把一个字符串按分隔符分成多个字符串数组,常用于多行文本分成多个段落输出,“分隔符”参数如果不填则默认是回车换行符分割。

假设我们的备注字段是一个多行字符串,可以通过下面方式分成多个段落输出。

#foreach($str in ${utils.SplitStr(${data.GetValue("beizhu")})})

${str}

#end

image.png


${utils.ToArr(列表, 2)}

将一个大列表拆分成一个列表数组,常用于将图片列表拆分后,分栏显示。假设我们有这么一个列表:["A","B","C","D","E","F","G"],如果调用:${utils.ToArr(["A","B","C","D","E","F","G"], 2)} ,则返回结果为:[["A","B"], ["C","D"], ["E","F"], ["G",""]]。这样我们就可以通过foreach循环将长列表分栏显示了,比如我们要把图片列表分为2栏显示,则如下:

image.png

效果如图:

image.png


${utils.ToCapital("金额")}

将金额转换成大写,比如:${utils.ToCapital("123.45")}返回:“壹佰贰拾叁元四角五分”。


3、word

提供了对Word操作的一些方法,比如插入图片用:${word.InsertImg("图片路径", 30,30)} 表示插入一张在word中显示大小为“30mm * 30mm”的图片。


${word.InsertImg("图片路径", 30, 30)}

插入图片,插入后显示大小为30mm * 30mm,假设客户有头像字段(数据库字段名为“__HeaderImg__”),我们想在word中如下显示:

image.png

那么我们可以在Word中进行配置:${word.InsertImg(${data.GetValue("__HeaderImg__")},33,32)}

image.png


插入图表:

在介绍插入图表的几个方法之前,先看看我们的导出数据配置,如下图我们的导出模版数据配置界面中,增加了一个汇总表(DataGridViewForGroupBy控件),共显示“保险公司”、“保单保费”、“折标保费”等三个字段,其中这2个保费字段为数值型。

控件名:DataGridViewForGroupBy1

所属单据:Policy

image.png


${word.InsertBarChart(子表数据, "图表标题", 80, 80)}

表示插入柱形图。如下,我们的子表数据就可以通过${data.GetChild("Policy","DataGridViewForGroupBy1")} 获得。其中Policy表示这个汇总表的所属单据,DataGridViewForGroupBy1表示这个汇总表控件的控件名:

${word.InsertBarChart(${data.GetChild("Policy","DataGridViewForGroupBy1")},"保单汇总",140,90)}

image.png


${word.InsertLineChart(子表数据, "图表标题", 80, 80)}

插入折线图。

${word.InsertLineChart(${data.GetChild("Policy","DataGridViewForGroupBy1")},"保单汇总",140,90)}

image.png


${word.InsertPieChart(子表数据, "图表标题", 80, 80)}

插入饼图。

${word.InsertPieChart(${data.GetChild("Policy","DataGridViewForGroupBy1")},"保单汇总",140,90)}

image.png


4、script

执行E6脚本。如

${script.Exec("Today()")} 表示计算当天日期。