C# 从文档docx中删除permStart和permEnd标记

C# 从文档docx中删除permStart和permEnd标记,c#,.net,openxml,C#,.net,Openxml,我有2个docx文档,这些文档在文档级别是只读的。但是,这些文档中少数段落的编辑选项是通过使用permStart和permEnd标记启用的 我必须合并这两个文件,使新的文件可编辑。我正在使用PowerTools DocumentBuilder合并这两个docx。最终的docx是可编辑的,但由于存在permStart和permEnd标记,所有段落都以灰色背景突出显示 我想知道如何删除这些permStart和permEnd标签。我尝试了以下代码,但不起作用 wordD.MainDocumentPar

我有2个docx文档,这些文档在文档级别是只读的。但是,这些文档中少数段落的编辑选项是通过使用permStart和permEnd标记启用的

我必须合并这两个文件,使新的文件可编辑。我正在使用PowerTools DocumentBuilder合并这两个docx。最终的docx是可编辑的,但由于存在permStart和permEnd标记,所有段落都以灰色背景突出显示

我想知道如何删除这些permStart和permEnd标签。我尝试了以下代码,但不起作用

wordD.MainDocumentPart.Document.Body.RemoveAllChildren(); wordD.MainDocumentPart.Document.Body.RemoveAllChildren()

我正在使用OpenXMLSDK2.0、VS2010、.NET4.0和Powertools文档生成器。任何帮助都会很好


谢谢大家!

以下是我删除permStart和permEnd标签的方法。欢迎对以下代码进行任何改进

                foreach (PermStart p1 in wordD.MainDocumentPart.Document.Body.Descendants<PermStart>())
                {
                    p1.Parent.RemoveChild<PermStart>(p1);
                }

                foreach (PermEnd p2 in wordD.MainDocumentPart.Document.Body.Descendants<PermEnd>())
                {
                    p2.Parent.RemoveChild<PermEnd>(p2);
                }
                wordD.MainDocumentPart.Document.Save();
foreach(wordD.MainDocumentPart.Document.Body.subjects()中的PermStart p1)
{
p1.父母离体儿童(p1);
}
foreach(PermEnd p2在wordD.MainDocumentPart.Document.Body.subjects()中)
{
p2.父母离体儿童(p2);
}
wordD.MainDocumentPart.Document.Save();

您需要删除文档保护。除此之外,您还需要删除PermStart和PermEnd,因为这些标记仅在文档受到保护时才相关。代码将是

  • 删除文档保护

    DocumentSettingsPart DocumentSettingsPart=wordprocessingDocument.MainDocumentPart.GetPartSoftType().FirstOrDefault()

    if(documentSettingsPart!=null)
    {
    documentSettingsPart.Settings.RemoveAllChildren();
    }
    
  • 删除PermStart和PermEnd标记,就像您已经做的那样

    wordD.MainDocumentPart.Document.Body.RemoveAllChildren(); wordD.MainDocumentPart.Document.Body.RemoveAllChildren(); wordD.MainDocumentPart.Document.Save()

  •     if (documentSettingsPart != null)
        {
            documentSettingsPart.Settings.RemoveAllChildren<DocumentProtection>();
        }