我正在尝试使用 OpenXML SDK 和 Microsoft 页面上的示例将占位符替换为 Word 文档中的真实内容。
它曾经像描述的那样工作 here ,但在 Word 中编辑模板文件并添加页眉和页脚后,它停止工作了。我想知道为什么,一些调试向我展示了这个:
这段代码中texts
的内容是什么:
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(DocumentFile, true))
{
var texts = wordDoc.MainDocumentPart.Document.Body.Descendants<Text>().ToList();
}
所以我在这里看到的是文档的正文是“碎片化的”,即使在 Word 中内容看起来像这样:
谁能告诉我如何解决这个问题?
有人问我要实现什么目标。基本上我想用真实内容替换用户定义的“占位符”。我想像对待模板一样对待 Word 文档。占位符可以是任何东西。在我上面的示例中,它们看起来像 {var:Template1}
,但这只是我正在玩的东西。它基本上可以是任何词。
例如,如果文档包含以下段落:
Do not use the name USER_NAME
用户应该能够将 USER_NAME
占位符替换为单词 admin
,例如,保持格式不变。结果应该是
Do not use the name admin
我在处理段落级别、连接内容并然后替换段落内容时遇到的问题,我担心我会丢失应该保留的格式
Do not use the name admin
最佳答案
各种各样的事情都可以使文本运行碎片化。最常见的校对标记(显然是这里的情况,其中有“波浪形”)或 rsid(用于比较文档和跟踪谁编辑了什么,什么时候),以及背景中的“返回”书签 Word 集。如果您查看 document.xml“部分”中的底层 WordOpenXML(例如,使用 Open XML SDK Productivity Tool),这些将变得显而易见。
通常有助于将元素级别“更高”。在这种情况下,获取 Paragraph 后代的列表并从那里获取所有 Text 后代并连接它们的 InnerText。
关于c# - 使用 OpenXML 替换 DOCX 文件中的文本 - 奇怪的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34002797/