【问题标题】:Conditional show text block in .docx using OpenTBS based on variable value使用基于变量值的 OpenTBS 在 .docx 中条件显示文本块
【发布时间】:2014-08-28 14:58:54
【问题描述】:

在我的项目中,我使用 TinyButStrong / OpenTBS 从模板生成 Word 文档。首先,我在文档中加载一个类似myuser 的变量。

[onload;tplvars;myuser=user]

文档提供了所需的变量,所以我可以在变量名称的位置添加这样的标签:

Hello [myuser.firstName]!

条件值也可以正常工作:

[onshow;block=tbs:p;when [myuser.firstName]='John'] This is a paragraph just for John.

但是当我有多个要显示/隐藏的段落时,选择正确的段落(或更改模板并添加段落)并不容易。是否可以创建具有基于值显示的“开始”和“结束”的块?像这样的东西(伪代码):

Paragraph 1
[if [myuser.firstName] = 'John']
    (insert random number of paragraphs and maybe tables/other stuff here)
[end if]
Paragraph n

我在 TBS/OpenTBS 文档中找不到任何这些内容。有人知道这样做的方法吗?

谢谢!

尼尔斯

【问题讨论】:

    标签: docx opentbs tinybutstrong


    【解决方案1】:

    TBS 有一个块语法 [onshow;block=being]...[onshow;block=end] 但对于 OpenTBS 这是一个不好的做法,因为实际上在内部 XML 中这两个标签被放置在两个分开的 @987654321 @实体。因此,这些实体将一分为二,如果它们与新合并的内容相匹配,那就幸运了。

    一种解决方案是使用段落实体保护开始/结束标签。

    [onshow;block=begin;enlarge=tbs:p;when ....] This paragraph will be deleted
    Some text here.
    Some text there.
    [onshow;block=end;enlarge=tbs:p] This paragraph will be deleted
    

    另一种解决方案是在几个段落上定义一个块: 此块在 3 个段落中定义:

    [onshow;block=tbs:p+tbs:p+tbs:p;when ...] Paragraph 1 - inside the block
    Paragraph 2 - inside  the block
    Paragraph 3 - inside  the block
    Paragraph 4 - outside the block
    

    另一种解决方案是

    【讨论】:

    • 感谢您的回复,帮助很大!对于有相同问题的人:[onshow;block=begin ...] 内容应该放在单独的段落中,因为整个段落都被删除了。
    • @nielsr 你如何避免这种行为?我有一个文本,例如:一些文本,“有时是这个文本”,一些其他文本我有时只想显示“有时这个文本”,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    相关资源
    最近更新 更多