【发布时间】: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>
后来在文档中我发现了显示符号:<w:t>«NP021_INSSNumber»</w:t>
这在代码中是非常不可能解析的。
在 Word 中做同样的事情怎么可能产生如此不同的结果,有没有办法确保 Word 使用 SimpleFields 作为合并字段的 XML 表示法?
提前感谢您提供任何有用的意见。
【问题讨论】:
-
我看到了同样的问题,尝试 RevisionAcceptor 并简化标记并不能解决它。我的合并字段仍保留为 instrText 并且未转换回 fldSimple。有没有其他人见过这个?你是如何解决这个问题的?
-
看起来两者都受支持 - 这些文档 (officeopenxml.com/WPfields.php) 区分简单字段和复杂字段
标签: .net openxml-sdk docx mergefield