OpenTBS - 使用令牌替换重复段落?
OpenTBS - Repeating Paragraph with Token Replacement?
我有一个基于文本的(而不是基于 table 的).docx 文档,其中的一个部分在段落中有多个位置可供替换。必须复制此段落,并为数组中的每个条目替换标记。我正在继续梳理文档,但有点卡在这个文档上——大多数示例都是基于 table 的,我不知道如何才能完成我的目标。
这是我目前用作模板的 .docx 文件中的部分示例:
[onshow; block=begin; personsblock=tbs:p;]
Person 1
[flex_27.xx.01] [flex_27.xx.02], currently of [flex_27.xx.05], as amazing with the following: __{this has yet to be determined}__.
[onshow; block=end; personsblock=tbs:p]
...我目前的数据是:
$personarray = array();
$personarray[] = array('tID27.01.01'=> 'Steve', 'tID27.01.02'=>'Klutcher' , 'tID27.01.05'=>'', 'tID27.01.06'=>'Cook');
$personarray[] = array('tID27.02.01'=> 'Tommy', 'tID27.02.02'=>'Boonary' , 'tID27.02.05'=>'Clarksville', 'tID27.02.06'=>'Montgomery');
...在这一点上,我几乎迷路了。我将以编程方式将中心 'code'(由 xx 标记)替换为相关人员的数量。合并和替换有什么区别?我如何结合行动?我能以某种方式对文档进行多次传递吗?
抱歉,如果这些问题看起来很基本,但正如我所说,我已经在这个问题上停留了两天。
当您使用 block=begin ... block=end
时,这些是绝对边界的语法。它们指示源中块的开始和结束位置。
在文档中,您无权访问内部 XML 来源。所以建议blocs使用相对语法
在 PHP 中,你的数据结构应该是这样的:
$personarray = array();
$personarray[] = array('c01'=> 'Steve', 'c02'=>'Klutcher' , 'c05'=>'', 'c06'=>'Cook');
$personarray[] = array('c01'=> 'Tommy', 'c02'=>'Boonary' , 'c05'=>'Clarksville', 'c06'=>'Montgomery');
在您的 DOCX 中,您的模板片段应如下所示:
Person 1
[person.c01;block=tbs:p] [person.c02], currently of [person.c05], as amazing ...
假设这两行在同一段中。
表达式[person.01;block=tbs:p]
是一个合并'01'列的TBS字段,同时定义块绑定为嵌入该字段的段落。
它们也是您原来的 PHP spinnet 中的一些问题:
- 列名称不应包含点 (.),因为这是 TBS 字段名称的分隔符。
- 我使用前缀 'c' 因为 PHP 会将数字字符串键作为数字索引。
我有一个基于文本的(而不是基于 table 的).docx 文档,其中的一个部分在段落中有多个位置可供替换。必须复制此段落,并为数组中的每个条目替换标记。我正在继续梳理文档,但有点卡在这个文档上——大多数示例都是基于 table 的,我不知道如何才能完成我的目标。
这是我目前用作模板的 .docx 文件中的部分示例:
[onshow; block=begin; personsblock=tbs:p;]
Person 1
[flex_27.xx.01] [flex_27.xx.02], currently of [flex_27.xx.05], as amazing with the following: __{this has yet to be determined}__.
[onshow; block=end; personsblock=tbs:p]
...我目前的数据是:
$personarray = array();
$personarray[] = array('tID27.01.01'=> 'Steve', 'tID27.01.02'=>'Klutcher' , 'tID27.01.05'=>'', 'tID27.01.06'=>'Cook');
$personarray[] = array('tID27.02.01'=> 'Tommy', 'tID27.02.02'=>'Boonary' , 'tID27.02.05'=>'Clarksville', 'tID27.02.06'=>'Montgomery');
...在这一点上,我几乎迷路了。我将以编程方式将中心 'code'(由 xx 标记)替换为相关人员的数量。合并和替换有什么区别?我如何结合行动?我能以某种方式对文档进行多次传递吗?
抱歉,如果这些问题看起来很基本,但正如我所说,我已经在这个问题上停留了两天。
当您使用 block=begin ... block=end
时,这些是绝对边界的语法。它们指示源中块的开始和结束位置。
在文档中,您无权访问内部 XML 来源。所以建议blocs使用相对语法
在 PHP 中,你的数据结构应该是这样的:
$personarray = array();
$personarray[] = array('c01'=> 'Steve', 'c02'=>'Klutcher' , 'c05'=>'', 'c06'=>'Cook');
$personarray[] = array('c01'=> 'Tommy', 'c02'=>'Boonary' , 'c05'=>'Clarksville', 'c06'=>'Montgomery');
在您的 DOCX 中,您的模板片段应如下所示:
Person 1
[person.c01;block=tbs:p] [person.c02], currently of [person.c05], as amazing ...
假设这两行在同一段中。
表达式[person.01;block=tbs:p]
是一个合并'01'列的TBS字段,同时定义块绑定为嵌入该字段的段落。
它们也是您原来的 PHP spinnet 中的一些问题:
- 列名称不应包含点 (.),因为这是 TBS 字段名称的分隔符。
- 我使用前缀 'c' 因为 PHP 会将数字字符串键作为数字索引。