c# - 替换 OpenXML 中内容控件的文本

标签 c# ms-word openxml word-contentcontrol

我有一个包含多个 Rich Text Content Control 的 word 文件,我想更改它的文本。我使用此代码。

 using (WordprocessingDocument theDoc = WordprocessingDocument.Open(docName, true))
 {
    MainDocumentPart mainPart = theDoc.MainDocumentPart;
    foreach (SdtElement sdt in mainPart.Document.Descendants<SdtElement>())
    {
        SdtAlias alias = sdt.Descendants<SdtAlias>().FirstOrDefault();
        if (alias != null)
        {
            string sdtTitle = alias.Val.Value;
            var t = sdt.Descendants<Text>().FirstOrDefault();
            t.Text="Atul works at Microsoft as a .NET consultant. As a consultant his job is to design, develop and deploy";
        }
    }
 }

它是用旧文本添加新文本。但是我想替换这个!!!

最佳答案

您只检索和更新 sdtContent 的第一个文本。 要全部替换,最简单的方法是:

  • 删除所有文本
  • 添加新文本

更新您的代码:

if (alias != null)
{
    // delete all paragraph of the sdt
    sdt.Descendants<Paragraph>().ToList().ForEach(p => p.Remove());
    // insert your new text, who is composed of:
    // - A Paragraph
    // - A Run
    // - A Text
    sdt.Append(new Paragraph(new Run(new Text("As a consultant his job is to design, develop and love poney."))));
}

编辑:我忘记添加段落和运行

您可以在此处查看如何构建 SdtContent https://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.sdtcontentblock(v=office.14).aspx

关于c# - 替换 OpenXML 中内容控件的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31750228/

相关文章:

c# - WPF 设计器错误值不能为空。参数名称 : pattern

c# - Windows 系统托盘应用程序,如卷应用程序

c# - 如何在 button_click 事件中从 Revit API 引用文档和应用程序?

delphi - Word 自动化仅适用于管理员,或者在创建 word.application 后会出现延迟

c# - 您必须添加对程序集 'WindowsBase, Version=3.0.0.0 的引用

java - 修复记录: Cell information from worksheet created

c# - 如何将 4 字节字符串编码为单个 32 位整数?

Microsoft Word 中的 Python 语法突出显示

java - 使用 POI 创建 Word 文件

vb6 - SpreadsheetML 中的主题混淆