对于此类问题,您可以做的最好的事情是下载Open XML SDK 生产力工具,并比较您在进行更改之前和之后创建的文档。当我使用 VSTO 添加操作窗格并在工具中探索包时,我注意到这一点:

然后我使用您提供的代码删除操作窗格:
Globals.ThisDocument.XMLSchemaReferences["ActionsPane3"].Delete();
this.Save();
如果我们现在查看工具中的包,我们会看到以下内容(请注意令人敬畏的手绘):

现在我们已经确定了需要删除的内容,我们可以开始使用 open xml sdk(using DocumentFormat.OpenXml.Packaging
打开文件并using DocumentFormat.OpenXml.Wordprocessing
对其进行修改)。在工具中保持文档打开总是很方便,以便能够使用树结构来构建代码。首先我编写代码来打开和保存文档:
byte[] byteArray = File.ReadAllBytes(@"C:\WorkSpace\test\WordTest.docx");
using (var stream = new MemoryStream())
{
stream.Write(byteArray, 0, byteArray.Length);
using (WordprocessingDocument doc = WordprocessingDocument.Open(stream, true))
{
//Logic here
}
using (FileStream fs = new FileStream(@"C:\WorkSpace\test\WordTest_modified.docx",
FileMode.Create))
{
stream.WriteTo(fs);
}
}
要删除AttachedSchema
您需要以下代码:
doc.MainDocumentPart.DocumentSettingsPart
.Settings
.GetFirstChild<AttachedSchema>()
.Remove();
如您所见,使用您旁边的树结构编写此内容非常方便。要删除,SchemaReference
您将需要以下代码:
doc.MainDocumentPart.CustomXmlParts.First()
.CustomXmlPropertiesPart
.DataStoreItem
.SchemaReferences
.FirstChild
.Remove();
就这样,就像您在 VSTO 应用程序中删除它一样。
编辑:如果我执行以下行以删除所有/docProps/custom.xml
操作窗格,则消失:
doc.CustomFilePropertiesPart.Properties.RemoveAllChildren();
我无法真正测试这是否是您的预期行为,因为我使用了测试文档(大小没有显着变化),但现在看到我的操作窗格不见了,它可能是您正在寻找的(属性包含参考我的本地 vsto 文件)。我希望微软能更好地记录这种东西。