- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用 C# OpenXml SDK(来自 NuGet 的非官方 Microsoft Package 2.5)成功工作了一段时间,但最近注意到以下代码行返回不同的结果,具体取决于 Microsoft Word 在何时出现的心情文件被保存:
var fields = document.Descendants<FieldCode>();
据我所知,首先创建文档时(在 Windows 8.1 上使用 Word 2013)如果您使用 Insert->QuickParts->Field 并从 Field names 左侧 Pane 中选择 MergeField,然后提供a 字段属性中的字段名称,然后单击“确定”,然后字段代码将按照我的预期正确保存在文档中。
然后,当使用上述代码行时,我将收到 1 个字段的字段代码计数。如果我随后编辑此文档(甚至单独保留此字段),则后续保存可能意味着我的查询中不再返回此字段代码。
同样好奇的另一个例子是当我看到 FieldCode 节点拆分为多个项目时。所以与其说:
" MERGEFIELD Author \\* MERGEFORMAT "
作为节点名称,我将看到:
" MERGEFIELD Aut"
"hor \\* MERGEFORMAT"
拆分为两个 FieldCode 节点值。我不知道为什么会这样,但这确实使我匹配节点的能力更加令人兴奋。这是预期的行为吗?一个已知的错误?在我了解发生了什么之前,我真的不想破解原始 xml 并编辑此文档。非常感谢大家。
最佳答案
我自己遇到了这个问题,并找到了一个存在于 OpenXML 中的解决方案:一个名为 MarkupSimplifier 的实用程序类,它是 PowerTools for Open XML 项目的一部分。使用此类解决了我遇到的您描述的所有问题。
The full article is located here.
以下是一些相关的摘录:
Perhaps the most useful simplification that this performs is to merge adjacent runs with identical formatting.
接着说:
Open XML applications, including Word, can arbitrarily split runs as necessary. If you, for instance, add a comment to a document, runs will be split at the location of the start and end of the comment. After MarkupSimplifier removes comments, it can merge runs, resulting in simpler markup.
正在使用的实用程序类的示例是:
SimplifyMarkupSettings settings = new SimplifyMarkupSettings
{
RemoveComments = true,
RemoveContentControls = true,
RemoveEndAndFootNotes = true,
RemoveFieldCodes = false,
RemoveLastRenderedPageBreak = true,
RemovePermissions = true,
RemoveProof = true,
RemoveRsidInfo = true,
RemoveSmartTags = true,
RemoveSoftHyphens = true,
ReplaceTabsWithSpaces = true,
};
MarkupSimplifier.SimplifyMarkup(wordDoc, settings);
我已经使用 VS2015 .Net Framework 4.5.2 在 Word 2010 文档中多次使用它,它让我的生活变得非常非常轻松。
更新:
我重新访问了这段代码,发现它在 MERGEFIELDS 上运行时会清除,但不会在引用合并字段的 IF FIELDS 上清除,例如
{if {MERGEFIELD When39} = "Y???" "Y" "N" }
我不知道为什么会这样,对底层 XML 的检查没有提供任何提示。
关于c# - 在 C# 的 OpenXml SDK 中使用 MergeField FieldCodes 时,为什么字段代码会消失或碎片化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31056953/
我已经使用 C# OpenXml SDK(来自 NuGet 的非官方 Microsoft Package 2.5)成功工作了一段时间,但最近注意到以下代码行返回不同的结果,具体取决于 Microsof
我是一名优秀的程序员,十分优秀!