c# - Open XML SDK:如果启用了更改,则不跟踪程序化文本更改
问题描述
我正在使用 Open XML SDK。我正在执行一些文本更改,但如果我看到输出文件,它有更改但没有被跟踪。
这是我的代码:
using (WordprocessingDocument doc = WordprocessingDocument.Open(@"C:\Users\Prateek\Desktop\Test.docx", true))
{
var body = doc.MainDocumentPart.Document.Body;
var paras = body.Descendants<Paragraph>();
foreach (var para in paras)
{
foreach (var run in para.Elements<Run>())
{
foreach (var text in run.Elements<Text>())
{
if (text.Text.Contains("Lorem"))
{
text.Text = text.Text.Replace("Lorem", "Lorem2");
}
}
}
}
}
解决方案
最重要的信息是您应该看看Open-Xml-PowerTools。
Open XML SDK是一个用于操作 Open XML 标记的非常底层的库。它不提供任何抽象,这意味着您需要自己创建任何和所有标记,使用Open XML SDK提供的强类型类,或者提到另一个示例,Linq to XML 与Open- XML-PowerTools库。后者为各种用例提供了更强大的工具。
例如,Open XML SDK 提供强类型类(如Paragraph
、Run
或Text
)来表示 Open XML 元素(如w:p
、w:r
或w:t
)。它还提供强类型类InsertedRun
、DeletedRun
或DeletedText
来表示修订标记,例如w:ins
、w:del
或w:delText
。如上所述,您需要使用那些强类型类来创建所需的标记。
所以说你有以下文件:
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:r>
<w:t>Lorem ipsum dolor sit amet</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
如果您Lorem
用Lorem2
修订标记替换,结果可能如下所示:
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:del w:del w:id="0" w:author="Thomas Barnekow" w:date="2019-12-09T00:14:00Z">
<w:r>
<w:delText>Lorem</w:delText>
</w:r>
</w:del>
<w:ins w:id="1" w:author="Thomas Barnekow" w:date="2019-12-09T00:14:00Z">
<w:r>
<w:t>Lorem2</w:t>
</w:r>
</w:ins>
<w:r>
<w:t xml:space="preserve"> ipsum dolor sit amet</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
好消息是Open-Xml-PowerTools库包含OpenXmlRegex
为您生成所需标记的实用程序类。
推荐阅读
- typo3 - 单一typo3 v10安装上的多域多语言站点
- odata - Azure 数据工厂 ODATA 不支持 MIME 类型
- c# - 停止在 XML 文档注释中自动添加“///”。(C#)
- plugins - 冷却不工作 [Minecraft Bukkit 插件]
- django - 在 Windows 上使用 python 实现 WebSocket 项目的最佳方式
- jqxgrid - 为什么 jqxgrid 在 IE 11 中不起作用但在 chrome 中起作用
- javascript - 使用 Javascript 验证 HTML 表单不起作用
- ios - 根据firebase逻辑,在uicollectionview中快速分段控制显示/隐藏单元格
- python - MemoryError: 无法分配形状 (2515, 406272) 和数据类型 float32 的数组
- design-patterns - 在 cassandra 中设计分区所需的建议