带有重复节内容控件和文本内容控件的Word文档会动态填充内容.创建文档后,需要删除所有控件以使文档更易于编辑(应保留内容). 我已经为代码创建了一个基本框架,如何才能扩展到只删除控件而保留内容?

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;

using (WordprocessingDocument doc = WordprocessingDocument.Open(@"C:\Temp\Test\Weekly Marketing Dashboard.docx", true))
{

    MainDocumentPart mainPart = doc.MainDocumentPart;

    var sdtElements = mainPart.Document.Descendants<SdtElement>().ToList();

    foreach (var sdtElement in sdtElements)
    {
        sdtElement.Remove();
    }

    mainPart.Document.Save();
}

推荐答案

最后,我自己找到了一个解决方案,使用OpenXML:

    static void RemoveContentControls(OpenXmlElement element)
{
    // Replace SdtCells
    var sdtCells = element.Descendants<SdtCell>().ToList();
    foreach (var sdtCell in sdtCells)
    {
        // Clone and paste each child element
        foreach (OpenXmlElement child in sdtCell.SdtContentCell.ChildElements)
        {
            sdtCell.InsertBeforeSelf(child.CloneNode(true));
        }
        sdtCell.Remove();
    }

    // Replace SdtRuns
    var sdtRuns = element.Descendants<SdtRun>().ToList();
    foreach (var sdtRun in sdtRuns)
    {
        // Clone and paste each child element
        foreach (OpenXmlElement child in sdtRun.SdtContentRun.ChildElements)
        {
            sdtRun.InsertBeforeSelf(child.CloneNode(true));
        }
        sdtRun.Remove();
    }

    // Process childs recursive
    foreach (var child in element.ChildElements.ToArray()) // Use ToArray for save modification during iteration
    {
        RemoveContentControls(child);
    }
}

Csharp相关问答推荐

.NET最小API映射将T参数列表为[FromQuery]

无法从具有一对多关系的C#类中使用Swagger创建记录

在C#中使用in修饰符

MongoDB将JS查询转换为C#的问题

SignalR客户端不会打印队列位置'

(乌龙)1&#比c#中的UL&#慢吗?

有没有办法在WPF文本框中添加复制事件的处理程序?

有没有办法使.NET 6应用程序在特定的.NET 6运行时版本上运行

C#XmlSerializer-输出控制新行的多个XML片段

为什么Regex.IsMatch(";\\t";,";\\t";)返回FALSE而不是TRUE?

为什么无法将对象转换为泛型类型

如何将字符串变量传递给JObject C#-无法加载文件或程序集';System.Text.Json

从VS调试器而不是测试资源管理器运行的调试NUnitDotNet测试

依赖项注入、工厂方法和处置困境

JsonSchema.Net删除假阳性判断结果

工厂类是如何在.NET 8中注册的?

在.NET Maui中,Flyoutindow/Hamburger菜单可以在shell 之外实现吗?

HttpClient,上传文件时实现进度

无法创建工具窗口(用于VBIDE、VBA的COM加载项扩展)

能否将我图表中的星号与X轴上一天中的第二位数字对齐?