【问题标题】:Unusual XML notations of mergefields in DOCX file.DOCX 文件中合并字段的异常 XML 表示法。
【发布时间】:2011-07-29 09:25:39
【问题描述】:

在我们的文档生成系统中,我们使用 DOCX 文件,我们在其中以编程方式填写合并字段。为此,我使用 OpenXml SDK 2.0。

我一直在浏览 de docx 中的 document.xml 文件,发现合并字段通常由 SimpleField 表示。我们使用的文档中的一个示例:

<w:fldSimple w:instr=" MERGEFIELD  NP021_INSSNumber  \* MERGEFORMAT "><w:r><w:rPr><w:noProof/></w:rPr><w:t>«NP021_INSSNumber»</w:t></w:r></w:fldSimple>

一个相当简单的符号,包含mergefield 命令和要在文档中显示的文本。在 XML 中找到这个标记相当容易,只需搜索 w:fldSimple 标记即可。 (我删除了一些样式标签以使其更具可读性)

但是最近在 Word 中创建的文档在我们的代码中没有解析,当我查看 XML 时,合并字段的表示法完全不同:

<w:instrText xml:space="preserve"> MERGEFIELD  NP021_INSSNumber  \* MERGEFORMAT </w:instrText>

后来在文档中我发现了显示符号:&lt;w:t&gt;«NP021_INSSNumber»&lt;/w:t&gt; 这在代码中是非常不可能解析的。

在 Word 中做同样的事情怎么可能产生如此不同的结果,有没有办法确保 Word 使用 SimpleFields 作为合并字段的 XML 表示法?

提前感谢您提供任何有用的意见。

【问题讨论】:

  • 我看到了同样的问题,尝试 RevisionAcceptor 并简化标记并不能解决它。我的合并字段仍保留为 instrText 并且未转换回 fldSimple。有没有其他人见过这个?你是如何解决这个问题的?
  • 看起来两者都受支持 - 这些文档 (officeopenxml.com/WPfields.php) 区分简单字段和复杂字段

标签: .net openxml-sdk docx mergefield


【解决方案1】:

我会在解析之前考虑accepting revisionssimplifying the markup

请注意,MarkupSimplifier 包含在 Power Tools for Open XML 中。

您可能会在Eric Whites blog postings 中找到更多有用的资料。

【讨论】:

  • 我看到了同样的问题,尝试 RevisionAcceptor 并简化标记并不能解决它。我的合并字段仍然保留为 instrText,并且没有被转换回 fldSimple。有没有其他人见过这个?
猜你喜欢
  • 2023-04-02
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多