23.5 导出word文档使用方法

1、简介

在使用云表的过程中,我们都知道可以将表单或总表导出为Excel表格,但有时我们还需要将表单导出为word文档(如系统中的公告、合同表单或参考资料等),根据使用者的需求,云表开发了将表单导出为word文档的功能。

2、使用说明

具体方法分为2步:
1、制作Word文档的样式模版
2、在云表中进行配置

2.1 制作导出Word样式模板

  • 什么是样式模版?
样式模版是用于记录Word文档中数据样式的,和云表的模版作用一样,Word样式模版除了样式以外,同样有数据项。
在Word文档中,创建与云表模板相同的数据项,按照样式模版的编写规则生成xml文件。
此xml文件就是导出Word文档的样式模板,通过它,我们就可以导出无数个相同格式的文档。
  • 什么是标签?
程序通过识别“标签”找到数据要填入的位置,可以理解为Word样式模版的标签就是云表模版中的数据项。
标签共有N种,我们需要了解每种标签的编写规则。
2.1.1 普通标签
$[姓名$] 就是一个普通标签,对应“姓名”数据项。.
普通标签分三个部分,分别是“标签头”、“标签尾”和“标签内容”,用于管理“文本”数据项。
1) 标签头
标签头是程序识别标签开始的标志,用英文格式的 $[ 表示。
2) 标签尾
标签尾是程序识别标签结束的标志,用英文格式的 $] 表示。
注意:标签头和标签尾就如同“左括号”和“右括号”,必须成对出现才是一个完整的标签。只有完整的标签才能被程序识别;
3) 标签内容
“标签头”和“标签尾”组合在一起,就成了一个“数据项”,至于这是什么数据项,就要看“标签内容”了。
标签内容是填写在普通标签中,用于匹配云表模版中的数据项,所以标签内容要与模版定义的数据项名称一致;. 如:$[姓名$] 就对应云表模板中“姓名”数据项。
2.1.2 图片标签
和普通标签类型类似,除了标签头、标签尾和标签内容以外,还有“占位图”组成。
图片标签的标签头:为了让程序识别这个标签对应的是图片数据项,在标签头后面需要加上“[图片]”作为标识。
图片标签的占位图:为了控制图片在导出文档中的位置和大小,需要在图片标签后面上传一张图片,注意图片环绕形式只能是嵌入型,这样图片可以是任意内容,因为在导出时,会被替换成表单中图片数据项的内容。
如:$[[图片]合影$]
“[图片]”是特殊标识,让系统判断该数据项是图片数据类型;“合影”就是数据项的名称。
$[[图片]合影$]
2.1.3 条形码标签、二维码标签
标签格式与普通标签一致,也是有标签开始,标签字段,标签结束,不过在标签字段前面有“[条形码]”或者“[二维码]”这个标识,如:$[[条形码]合同号$]   $[[二维码]合同号$]
其中,“合同号”就是标签字段,“[条形码]”只是特殊标识,让系统判断该字段需要转为条形码图片;同时,该标签后面需要上传一张图片,用于占位及控制大小,注意图片环绕形式只能是嵌入型,如:
$[[条形码]合同号$]
二维码和条形码的这个也支持在循环里面生成二维码和条形码
2.1.4 循环标签
$[[循环]明细表1$] $[明细表1.标题$] $[[结束循环]明细表1$]循环标签是一种特殊的标签类型,用于明细表的数据项管理,可细分为“明细表行循环”和“段落循环”。
和图片标签类似,需要在普通标签的基础上给程序做特殊的“标识”。
1) 循环标签的标签头和标签尾:
  在普通标签头后增加[循环],并在标识后填写明细表的名称,即 $[[循环]明细表1$]
  在普通标签尾后增加[结束循环],并在标识后填写明细表的名称,即 $[[结束循环]明细表1$] ;
  标签头和标签尾仍然要配套使用。
2) 循环标签的明细表数据项标签:
格式如下: $[明细表1.标题$] ,“$[ $]”之间的内容是明细表的数据项,写法为“明细表名称.数据项名称”;这个格式跟普通标签非常相似,只能在循环标签的标签头和标签尾之间使用。
2.1.4.1 Word表格行循环
如果需要将明细表的内容在Word文档中,以表格形式进行循环显示,需要将两个标签分别放在表格数据行的第一个格子及最后一个格子,中间的单元格则填入明细表数据项标签,如下图:
2.1.4.2 段落循环
如果想实现以段落或者的循环,则将两个标签分别放在需要循环的段落的前和后两个位置,如:
$[[循环]明细表1$]
用户名: $[明细表1.姓名$]
日期: $[明细表1.日期$]
$[明细表1.正文内容$]
$[[结束循环]明细表1$]
2.1.4.3  循环标签增加条件判断过滤数据
需要服务器版本3.3.45.43及以上版本支持
该功能主要用于循环明细表数据时,可以做到增加过滤条件,循环时判断符合的才循环显示出来
写法如下:在循环开始标签里面填写if条件标签,结束标签写上结束标签(记得中间有空格分隔)
$[[循环]明细2 [#if 明细2.产品名称==明细1.产品名称&&明细2.分类=="直接材料"]$]
 $[明细2.内容2$]
$[[结束循环]明细2 [/#if]$]
2.1.5 高级标签
高级标签是指某些特殊数据类型的特殊用法,遵循freemarker的标签语法,但是需要在高级标签外面加"$["“$]”作为标签的开始和结束,以下是一些常用的高级用法,其他更多用法可参考https://www.cnblogs.com/hwaggLee/p/4541586.html。
2.1.5.1 日期类型数据项转换显示
当数据项的数据类型是日期类型,如果需要指定显示精度,可以在数据项后面加“_对象”,再配合标签格式进行定制化显示:
写法:$[最后更新时间_对象?string(“yyyy-MM-dd HH:mm:ss zzzz”)$]
效果:2017-12-23 14:12:20 中国标准时间
2.1.5.2 数字类型数据项转换显示
当数据项的属性是数字类型,如需要指定显示精度,可以在数据项后面加“_对象”,再配合格式化标签进行显示;
数字格式化可采用$[#{字段名称_对象;format}$]的形式来格式化数字,其中format可以是:
    mX:小数部分最小X位
    MX:小数部分最大X位
写法:$[#{浏览次数_对象;m2}$]
效果:123.00
2.1.5.3 真假类型数据项转换显示
如果数据项属性是判断类型(也叫是否型、布尔型),可以对值的结果“真”/“假”,分别显示不同内容。
写法:$[是否打印_对象?string(“已打印”,“未打印”)$]
效果:已打印
2.1.5.4 判断语句
如果需要对模板某部分内容进行判断是否显示,可以用以下if标签进行判断,以下是if标签的两种常用用法:
1) 判断是否有值,加两个英文的?在需要判断的数据项后面,如果需要判断是否为空,则在数据项前面再加一个!,如:
     $[[#if !正文内容??]$]
     这个是没有正文内容的
     $[[/#if]$]
2) 判断字符串相等与否,可以使用判断符号相等“==”或者不相等“!=”:
     $[[#if 是否合影 ==“是”]$]
     这个是有合影的
     $[[/#if]$]

2.2 模板内容举例

测试生成word文档
用户名: $[姓名$]
最后更新时间:$[最后更新时间_对象?string(“yyyy-mm-dd HH:mm:ss zzzz”)$]
浏览次数:$[浏览次数$]
是否打印:$[是否打印?string(“已打印”,”未打印”)$]
$[正文内容+” 正文结束”$]
表格1:  
序号标题内容作者
$[[循环]明细表1$]$[明细表1_index+1$]$[明细表1.标题$]$[明细表1.内容$]$[明细表1.作者$]$[[结束循环]明细表1$]
$[[#if 是否合影 ==  “是”]$]
$[[图片]合影$]
$[[/#if]$]

2.3 注意事项

1) 标签开始$[和标签结束$]这两个字符,必须要同一字体,中间不能有空格,而且需要同时录入,如果生成word之后,如果这两个标签标记没有被数据源替换,请重新键盘录入(这是因为Word会把这两个字符分开不同段落);
2) 图片标签后面必须要上传一个图片进行占位,并且图片只能是嵌入型,该模板里面的图片最后是会被替换的;
3) 明细表数据要显示出来,必须得放在循环标签内;
4) 如果标签写法不合法的时候,生成Word时候会出现错误,理论上会提示出错的标签是哪个,但是如果没有则需要用排除法自行确认;
5) 标签里面的中文“”‘’&<>符号会自动替换为英文的",如果不想被替换,需要在前面加“\”即可;
6) 模板Word文档做好之后,office需要另存为“Word 2003 XML 文档(*.xml)”格式,而WPS则要另存为“XML 文件(*.xml)”格式,并上传到表单的模板中,其他格式无法作为模板文件,请注意格式;
7) 暂时不支持换行的多行文本及富文本内容;

2.4 在云表中进行配置

目前云表支持2种配置方式:
1) 本地配置管理样式模版(适用于未开通企业云盘的应用空间)
2) 【推荐】企业云盘管理样式模版(适用于已开通企业云盘的应用空间)
2.4.1 本地配置管理样式模版
1) custom.conf 文件配置
配置custom.conf文件,custom.conf文件在安装目录D:\Latosoft\LatoServer\Data\conf中(需要注意的是,如果在D:\Latosoft\LatoServer\Data文件夹中没有conf文件夹,那么需要在Data文件夹中新建一个conf文件夹,然后再新建一个文本文档,命名为custom.conf)
custom.conf文件配置方法:
(要导出为Word文档的表单所在应用空间ID).(云表空间中导出Word的模板名称)=[{"styleName":"(样式名称,可自定义)","url":".(样式文件名称,即生成的xml文件名称).xml"},{"styleName":"(样式名称,可自定义)","url":"(样式文件名称,即生成的xml文件名称).xml"}]
样式名称和样式文件名称各填写一个就行,此例中表示可以有两种样式。
配置完成后需重启服务器。
2) 云表空间模板设置
① 在要导出Word文档的模板-填表公式中,新建工具栏按钮,按钮标题设置为“导出Word文档”;
② 添加公式:“打开表单”
表单模板:使用需要导出信息的模板(即本模板);
样式名称:就是我们写的自定义配置文件里面的styleName(样式名称);
表单ID:当填写“本表单.sysFormID”时,表示导出当前表单,也可以用其他方式填写,如填写具体的表单ID数值,或根据数据项的内容。
例:我们在生成的xml文件中设置数据项为:
  $[标题$]. $[作者$]. $[内容$]
那么在云表模板中也要定义三个数据项,“标题”、“作者”、“内容” 这样在表单中“标题”数据项填入的数据,在导出WORD文档后,数据就会生成到word中$[标题$] 处,表单中“作者”数据项处填入的数据,在导出后会生成到word中 $[作者$]处,所有数据均是以此对应。
3)真实案例
假设我们要将销售订单,导出为Word文档。
首先,我们需要知道销售订单都有哪些数据项需要导出。
如果,我们要将表中的所有数据项的数据都导出为Word文档。那我们需要先建立一个Word文档,将表单中的数据项以前文讲过的的填写方式列出来。
然后,将此Word文档另存为.xml格式文件,命名为:销售订单。并放置在D:\Latosoft\LatoServer\Data\formStyle目录下。
配置custom.conf文件。我们首先找到D:\Latosoft\LatoServer\Data\conf这个目录(若没有conf文件夹,那么就手动建立一个文件夹,命名为conf)。然后以记事本(或文本文档)的方式打开custom.conf(若没有custom.conf文件,那么就手动建立一个文本文档或记事本,然后命名为custom.conf),配置内容如下:
注:配置好custom.conf文件后,需要重新启动服务器。
重启服务器后,进入云表系统中的销售订单模板。建立填表公式-工具栏按钮-选择打开表单。
表单模板,选择“销售订单”,样式名称为“销售订单”(就是我们配置的custom.conf文件中的styleName(样式名称))。
并选择根据表单ID进行匹配,匹配内容为:本表单.sysFormID(意思为导出当前表单)。
设置好后,保存模板,在总表中打开某张销售订单,点击刚刚建立的按钮,选择要导出到哪个文件夹,并填写导出Word的文档名称。点击确定后,即可成功导出为Word文档。
2.4.2 企业云盘管理样式模版
注:此方法需要把样式模版上传到企业云盘,所以先要确认应用空间时候已开通企业云盘。
1)创建样式模板
在业务服务器创建一个样式模板,用来存储要导出Word的样式。
要包含两个字段(样式名和样式文件),其中样式文件字段的数据类型使用文件(将样式文件上传到云盘)。
在样式模板中,创建一个“列表选择”接口,并使用样式名参数进行过滤。
创建好后,将导出word的样式文件(xml文件)上传到文件字段中,并填写样式名。
2) 在目标表单配置
在要导出Word的模板中,进行导出word配置。
数据接口使用刚刚创建的读取存储样式的数据接口,并根据样式名称参数过滤出想要的样式文件,将样式文件赋值到样式名称中。
表单ID设置为“本表单.sysFormID”,表示将当前表单导出为Word文档。
2023-06-14
38 37