gpt4 book ai didi

c# - 使用 WordProcessingDocument 时如何删除 XMLSchemaReference?

转载 作者:行者123 更新时间:2023-11-30 17:39:14 30 4
gpt4 key购买 nike

我想从 Word 文档中删除 XMLSchemaReference。运行 VBA 代码时,这很简单:

ActiveDocument.XMLSchemaReferences("ActionsPane3").Delete

在 VSTO 中使用 ThisDocument 类时,使用 C# 也很简单:

Globals.ThisDocument.XMLSchemaReferences["ActionsPane3"].Delete();

但是,当使用 WordProcessingDocument 实例时(在普通的 Windows 应用程序中),我不知道如何执行相同的操作。知道我应该如何编写 C# 代码吗?

最佳答案

对于此类问题,最好的办法是下载 Open XML SDK productivity tool并比较您在进行更改之前和之后制作的文档。当我使用 VSTO 添加操作面板并浏览工具中的包时,我注意到了这一点:

enter image description here

然后我使用您提供的代码删除操作面板:

Globals.ThisDocument.XMLSchemaReferences["ActionsPane3"].Delete();
this.Save();

如果我们现在查看工具中的包,我们有以下内容(请注意很棒的徒手书写):

enter image description here

现在我们已经确定了需要删除的内容,我们可以开始使用 open xml sdk(使用 DocumentFormat.OpenXml.Packaging 打开文件,使用 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,则操作 Pane 将消失:

doc.CustomFilePropertiesPart.Properties.RemoveAllChildren();

我无法真正测试这是否是您的预期行为,因为我使用的是测试文档(大小没有明显变化),但现在看到我的操作面板不见了,它可能就是您要找的(属性包含对我本地 vsto 文件的引用)。我希望微软能更好地记录这种东西。

关于c# - 使用 WordProcessingDocument 时如何删除 XMLSchemaReference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35725880/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com