c# - 使用 OpenXML 替换 DOCX 文件中的文本 - 奇怪的内容

标签 c# docx openxml-sdk

我正在尝试使用 OpenXML SDK 和 Microsoft 页面上的示例将占位符替换为 Word 文档中的真实内容。

它曾经像描述的那样工作 here ,但在 Word 中编辑模板文件并添加页眉和页脚后,它停止工作了。我想知道为什么,一些调试向我展示了这个:

enter image description here

这段代码中texts的内容是什么:

using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(DocumentFile, true))
{
    var texts = wordDoc.MainDocumentPart.Document.Body.Descendants<Text>().ToList();
}

所以我在这里看到的是文档的正文是“碎片化的”,即使在 Word 中内容看起来像这样:

enter image description here

谁能告诉我如何解决这个问题?


有人问我要实现什么目标。基本上我想用真实内容替换用户定义的“占位符”。我想像对待模板一样对待 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/

相关文章:

c# - 为什么在此示例中附加自动筛选会损坏我的 excel 文件?

C# 替换 docx 中的文本字符串

OpenXML 距离、大小单位

c# - 将 IEnumerable<string> 转换为字典

c# - 从麦克风输入录制现场音频并同时保存

c# - 返回一个通用的 IEnumerable<T>

php - 将 html 插入 .docx

c# - 如何通过页码访问OpenXML内容?

c# - Powershell 通用 session 并在 Exchange 远程管理 session 中导入此 session

javascript - 如何使Electron在外部应用程序中自动打开下载的文件?