我使用opentbs以.docx格式生成报告,从用户输入到表单的数据,并希望能够有条件地在字段之间添加空格。以下是该问题的范例示例:用户必须输入街道地址(地址1),但地址字段(分别为business和address2)之前和之后的字段是可选的。有没有办法在模板中设置合并字段,这样,如果用户将某些内容放入业务字段,则合并产生的文档将具有业务字段的值,后跟空格,但如果用户离开该字段为空白,合并产生的文档将不具有字段或空格?我可以看到实现此目的的两种可能方法:1。使用独立的合并字段,仅在字段" business"不是空白;或2.使用模板中的合并字段打印字段的值和空格,但仅当字段不为空时。
这是我对这两种解决方案的伪代码: 1. [onshow.business] [onshow; if [business]!= blank;然后' &#39 ;;别的''] [onshow.address1] 2. [onshow.business AND' '] [onshow.address1]
看起来这一定是可能的,但我还没有找到办法将伪代码转换成我的docx中真正的,有效的合并字段。模板。我已经搜索了这个论坛和tbs论坛上的所有条目,以及文档,但问题没有得到正确提出,我尝试过的东西都没有用。任何帮助将不胜感激。
答案 0 :(得分:4)
如果不是business
,则会在''
之后插入一个不间断的空格:
[onshow.business; if [val] != ''; then [val] ]
您可能遇到的问题是Word如何表示空格......我建议您首先插入一个问题较少的字符,以确保您的代码正常工作(例如^
或a
),然后努力寻找合适的字符/参数组合,使空间工作。
当您开始考虑时,我会尝试\s
:http://www.tinybutstrong.com/forum.php?thr=3234
然后我会查看xml:space="preserve"
:http://www.tinybutstrong.com/forum.php?thr=3263
它似乎显示在<w:t>
标记上,如下所示:<w:t xml:space="preserve">
所以您可以尝试以下内容:
PHP:
$f = 'preserve';
TEMPLATE:
[onshow.business; if [val] != ''; then '[val] ';][onshow.p;att='xml:space']
处理att
可能有更好的方法,但这至少可以让你开始。
答案 1 :(得分:4)
万一有人想要它,根据Sarah和Skrol29的答案,这就是我最终为我的文档整理的内容:
PHP:
没有变化
TEMPLATE:
[onshow.firstName] [onshow.lastName],[onshow.businessName; if [val] != '; then ' [val],'] [onshow.address1][onshow.address2; if [val] != '' then ' [val]'], [onshow.city], [onshow.state] [onshow.zip]; [onshow.phone]; [onshow.email]
合并的DOCX: businessName和address2留空:
Joe Bloggs, 123 Main Street, Los Angeles, CA 90066; 310-555-1212; test@email.com
填写了businessName,但地址2留空:
Joe Bloggs, Smith Co., 123 Main Street, Los Angeles, CA 90066; 310-555-1212; test@email.com
如果businessName留空,但地址2填写:
Joe Bloggs, 123 Main Street Suite 42, Los Angeles, CA 90066; 310-555-1212; test@email.com
同时使用:
Joe Bloggs, Smith Co., 123 Main Street Suite 42, Los Angeles, CA 90066; 310-555-1212; test@email.com
答案 2 :(得分:2)
以下两个解决方案假定[onshow.business]
和[onshow.adress1]
位于同一个Ms Word段落中。
你必须:
1)具有与字段不同的文本格式的字段[onshow.business]
之后的空格。例如,您可以将空格字符的字体边增加1。
注意:Word会根据文本上应用的格式将文本拆分为多个片段。每个代码段都在其自己的<w:r>
元素中定义。
2)然后在字段[onshow.business]
上添加参数磁铁,以便在字段为空时删除空格。
示例:
Hello [onload.business;magnet=w:r+w:r] [onload.address1]
与显示代码段分隔的|
相同的示例:
Hello |[onload.business;magnet=w:r+w:r]| |[onload.address1]
请假设某个字段[onshow.business]
必须位于其前面的文本的单独片段中,否则它将删除之前的文本,方法与删除该空格的方式相同。