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部分,如果可能 - 我该如何做到这一点?

MS Office - 如何将文档的某些部分绑定到自定义 XML 数据,然后通过 .NET 替换此数据

在 Word 2013 中支持重复内容控件(目标命名空间:http://schemas.microsoft.com/office/word/2012/wordml(;请参阅 [MS-DOCX] 中的重复部分

对于不需要Word 2013的方法,Google"repeatingSection openxml sdk"或类似的东西。

为了解决这个问题,我记录了一个标准化的方法,并将其命名为OpenDoPE。 您可以使用OpenXML SDK构建自己的支持,也可以使用IKVM docx4j。 实质上,您需要创建表行,并在每个行中将内容控件绑定到集合中的相应条目。

你已经进入了正确的轨道,用表重复CollectionItem子元素

  1. 创建基本的 XML 结构。
    仅向CollectionItems添加一个CollectionItem

  2. 在 Word 中打开您的文档 (2013(。
  3. 使用"开发工具"选项卡,显示"XML 映射"窗格。
  4. 将基本 XML 添加为新的自定义 XML 部件
  5. 从下拉列表中选择 XML 部件(除非将 xmlns 属性添加到 XML 的根节点,否则它不会显示任何名称/命名空间。

  6. 向要映射到重复元素的表中添加一行。
  7. 将光标放在第一列中。

  8. 在"XML 映射"窗格中Data1,在"CollectionItem
  9. 在"XML 映射"窗格中选择"Data1"。(您必须在右键单击之前选择(
  10. 右键单击Data1,选择"插入内容控件",然后选择适当的控件类型,如"纯文本">
  11. 对第 2 列重复 8-10,并在"XML 映射窗格"中Data2

  12. 使用表格的"布局工具"功能区,选择已映射Data1Data 2的行。
  13. 返回 XML 映射窗格,首先选择,然后右键单击作为 Data1 & Data2 父节点的CollectionItem节点。
  14. 选择"Insert Repeating Section Content Control
  15. "。

现在,数据已绑定到 CollectionItem 节点及其子节点。您将在每个表格行的右下角看到一个大的 [+]。单击此按钮将在表中插入一个新行,并在XML中插入一个新的CollectionItem元素,其中包含2个子元素:Data1Data2

可以使用内容控件的属性窗口阻止文档内编辑(选择控件 [在开发人员设计模式下需要单击标记两次],然后点击"开发工具"选项卡功能区上的属性(。

然后,使用 SDK 打开文档,找到要替换的自定义 XML 部件(同样,最好将命名空间放入这样更容易(,然后将 [ xmlPart.FeedData() ] 替换为具有任意数量的子节点的更新 XML。生成的文档将有一个表格,其中这些重复元素作为行。