- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从 Word 文档中删除 XMLSchemaReference。运行 VBA 代码时,这很简单:
ActiveDocument.XMLSchemaReferences("ActionsPane3").Delete
在 VSTO 中使用 ThisDocument 类时,使用 C# 也很简单:
Globals.ThisDocument.XMLSchemaReferences["ActionsPane3"].Delete();
但是,当使用 WordProcessingDocument 实例时(在普通的 Windows 应用程序中),我不知道如何执行相同的操作。知道我应该如何编写 C# 代码吗?
最佳答案
对于此类问题,最好的办法是下载 Open XML SDK productivity tool并比较您在进行更改之前和之后制作的文档。当我使用 VSTO 添加操作面板并浏览工具中的包时,我注意到了这一点:
然后我使用您提供的代码删除操作面板:
Globals.ThisDocument.XMLSchemaReferences["ActionsPane3"].Delete();
this.Save();
如果我们现在查看工具中的包,我们有以下内容(请注意很棒的徒手书写):
现在我们已经确定了需要删除的内容,我们可以开始使用 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/
我使用 openxml-sdk 创建了一个大型(约 1000 页)word 文档。当我第一次使用 word 应用程序打开它时,它在状态栏中显示“Word 正在对 test.docx 的页面重新编号”,
我对此有疑问: using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true)) { } 使用上
我正在尝试打开一个 Word 文档,更改一些文本,然后将更改保存到一个新文档中。我可以使用下面的代码完成第一步,但我不知道如何将更改保存到新文档(指定路径和文件名)。 using System; us
我想从 Word 文档中删除 XMLSchemaReference。运行 VBA 代码时,这很简单: ActiveDocument.XMLSchemaReferences("ActionsPane3"
我是 open xml sdk 的新手,我对文字处理文档的关系如何工作不太了解。我想从包含 webtask-pane 的现有文档中删除 webtask-pane 并通过编程方式添加它。 使用 open
我有以下代码通过“另存为”通过 OpenXML SDK 将 Word 文档保存到新文档中。然后我想尝试读取从 ASP.Net 创建的文件,但是我无法这样做,因为文件被锁定并且在应用程序池重新启动之前不
我有一个代码是我用 System.IO 读取字节数组格式的 docx 文档。后来我制作了一个 docx 字节数组流,并使用 WordprocessingDocument 来编辑 docx 流。 我编辑
我正在寻找一种方法来识别 DOCX 文件(如果它们被移动或重命名)。原因很明显,我正在使用 Open XML SDK,构建一个超链接检查器。 工作完美,至少可以添加或更新文档中的超链接。 问题是,如果
我正在尝试学习如何使用 Microsoft 的 Open XML SDK。我按照他们关于如何使用 FileStream 创建 Word 文档的步骤进行操作。它工作得很好。现在我想创建一个 Word 文
目前,我基于 Microsoft 站点上的“在文档部分 (Open XML SDK) 中搜索和替换文本”。我意识到在文件下载到我的驱动器后代码出现了问题。 所以我打开那个文件并收到一条消息 MEMOR
我是一名优秀的程序员,十分优秀!