0

我需要从某种模板(用于生成合同、发票等)在 .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 部分,如果可能的话 - 我该怎么做?

4

2 回答 2

0

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

对于不需要 Word 2013 的方法,谷歌“repeatingSection openxml sdk”或类似的方法。

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

于 2013-08-28T03:24:42.860 回答
0

您在表格和重复CollectionItem子元素方面走在了正确的轨道上

  1. 创建基本的 XML 结构。
    只添加一个CollectionItemCollectionItems.

  2. 在 Word (2013) 中打开您的 docx。
  3. 使用 Developer 选项卡,显示 XML Mapping 窗格。
  4. 将您的基本 XML 添加为新的自定义 XML 部件
  5. 从下拉列表中选择您的 XML 部分(它将不显示名称/命名空间,除非您将 xmlns 属性添加到 XML 的根节点。)

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

  8. 在 XML 映射窗格中,找到Data1下的节点CollectionItem
  9. Data1在 XML 映射窗格中选择。(您必须在右键单击之前选择)
  10. 右键单击Data1,选择“插入内容控件”,然后选择适当的控件类型,例如“纯文本”
  11. 对第二列和Data2XML 映射窗格重复 8-10。

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

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

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

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

于 2014-10-20T16:52:50.633 回答