MS Office - 如何将文档的某些部分绑定到自定义 XML 数据,然后通过 .NET 替换此数据
本文关键字:数据 XML 自定义 然后 替换 NET 绑定 Office 文档 些部 MS | 更新日期: 2023-09-27 18:29:03
我需要从某种模板(用于生成合同、发票等(在 .NET 中生成 .docx/.xlsx 文件。...我找到了有关 OpenXML 格式的自定义 XML 部件以及将此部件中的数据绑定到文档的一些信息,因此我可以简单地绑定自定义 XML 部件中的字段......
我的主要问题是 - 如何将某些文档部分绑定到XML中的集合?例如,我在.docx文档中将此 XML 作为自定义 XML 部分:
<Data>
<Name>Superman</Name>
<Collection>
<CollectionItem>
<Data1>1</Data1>
<Data2>11</Data2>
</CollectionItem>
<CollectionItem>
<Data1>2</Data1>
<Data2>22</Data2>
</CollectionItem>
<CollectionItem>
<Data1>3</Data1>
<Data2>33</Data2>
</CollectionItem>
<CollectionItem>
<Data1>4</Data1>
<Data2>44</Data2>
</CollectionItem>
</Collection>
</Data>
我可以将名称标签绑定到文本内容控件。是否可以制作列表或表并将列表项或表行绑定到 CollectionItem 标记?例如,我希望从上面的XML示例生成下一个表:
+-------------------|----------------------+
| Header1 | Header2 |
+-------------------|----------------------+
| 1 | 11 |
+-------------------|----------------------+
| 2 | 22 |
+-------------------|----------------------+
| 3 | 33 |
+-------------------|----------------------+
| 4 | 44 |
+-------------------|----------------------+
我的问题的第二部分:是否有可能通过.NET和OpenXML SDK替换此自定义XML部分,如果可能 - 我该如何做到这一点?
在 Word 2013 中支持重复内容控件(目标命名空间:http://schemas.microsoft.com/office/word/2012/wordml(;请参阅 [MS-DOCX] 中的重复部分
对于不需要Word 2013的方法,Google"repeatingSection openxml sdk"或类似的东西。
为了解决这个问题,我记录了一个标准化的方法,并将其命名为OpenDoPE。 您可以使用OpenXML SDK构建自己的支持,也可以使用IKVM docx4j。 实质上,您需要创建表行,并在每个行中将内容控件绑定到集合中的相应条目。
你已经进入了正确的轨道,用表重复CollectionItem
子元素
- 创建基本的 XML 结构。
仅向CollectionItems
添加一个CollectionItem
。 - 在 Word 中打开您的文档 (2013(。
- 使用"开发工具"选项卡,显示"XML 映射"窗格。
- 将基本 XML 添加为新的自定义 XML 部件
- 从下拉列表中选择 XML 部件(除非将 xmlns 属性添加到 XML 的根节点,否则它不会显示任何名称/命名空间。
- 向要映射到重复元素的表中添加一行。
- 将光标放在第一列中。
- 在"XML 映射"窗格中
Data1
,在"CollectionItem
- 在"XML 映射"窗格中选择"
Data1
"。(您必须在右键单击之前选择( - 右键单击
Data1
,选择"插入内容控件",然后选择适当的控件类型,如"纯文本"> - 对第 2 列重复 8-10,并在"XML 映射窗格"中
Data2
。 - 使用表格的"布局工具"功能区,选择已映射
Data1
和Data 2
的行。 - 返回 XML 映射窗格,首先选择,然后右键单击作为
Data1
&Data2
父节点的CollectionItem
节点。 - 选择"
Insert Repeating Section Content Control
"。
现在,数据已绑定到 CollectionItem 节点及其子节点。您将在每个表格行的右下角看到一个大的 [+]。单击此按钮将在表中插入一个新行,并在XML中插入一个新的CollectionItem
元素,其中包含2个子元素:Data1
和Data2
。
可以使用内容控件的属性窗口阻止文档内编辑(选择控件 [在开发人员设计模式下需要单击标记两次],然后点击"开发工具"选项卡功能区上的属性(。
然后,使用 SDK 打开文档,找到要替换的自定义 XML 部件(同样,最好将命名空间放入这样更容易(,然后将 [ xmlPart.FeedData()
] 替换为具有任意数量的子节点的更新 XML。生成的文档将有一个表格,其中这些重复元素作为行。