【问题标题】:Use Open XML to read already opened Word documents?使用 Open XML 读取已打开的 Word 文档?
【发布时间】:2012-04-11 14:48:44
【问题描述】:

我见过的所有示例和实现都使用某种类型的代码,例如:

//filePath is some path to a docx file
using (WordprocessingDocument wpd = WordprocessingDocument.Open(filePath, true))
{
    //Do stuff here
}

这需要关闭您的文件。我希望能够在已经打开的文档上使用 Open XML SDK 操作,因为我想在用户积极浏览文档时做一些事情,而且我不一定要保存它。

这可能吗?我意识到如果文档打开,Word 可能会锁定文档,因此您无法打开文件(即使是只读的)。有什么办法解决吗?

如果我能以某种方式在已经打开的文档上使用 Open XML SDK,那就太好了。我的一个想法是暂时保存已经打开的文件,并在临时文件上运行 OpenXML 内容,并使用 Office API 以某种方式将其与现有文档进行协调。没有考虑过这种方法,但这不是我想要的理想方法。

我还知道 Word API 上的一个属性,它通过执行 Word.Range.XML 返回 XML 字符串。但是,我不确定如何将此字符串值加载到 SDK,以便我可以利用它的方法来帮助我。

【问题讨论】:

  • 当文件以只读方式打开时,它以只读方式打开,并且 Word(和大多数其他 Office 应用程序)确实会以该模式打开文件。 AFAIK,一旦它生效,就不可能告诉操作系统只读应该被忽略。 (这实际上很好 - 你能想象能够说“哎呀,忽略有人说他们想锁定文件以允许其他人只读访问,并无论如何都给我访问权限的事实。”可能产生的影响?)跨度>
  • 是的,我完全理解为什么它被锁定了。我想我有一些想法,因为我们可以通过 Word API 操作文件,所以我可以对 Open XML 做同样的事情,但这是错误的。

标签: ms-word openxml


【解决方案1】:

你可以用office已经打开的文件打开word文档Open XML SDK。 您应该首先打开一个 FileStream,然后打开指定此流的 Word 文档。这是一个例子:

using (Stream stream = new FileStream(file,FileMode.Open,FileAccess.Read,FileShare.ReadWrite))
{
 using (WordprocessingDocument wpd = WordprocessingDocument.Open(stream, false))
 {
  ....
 }
}

【讨论】:

    【解决方案2】:

    【讨论】:

    • 谢谢,这正是我想要的。似乎混合方法(Office API 和 Open XML)是唯一的方法
    • Atul,我注意到代码执行 Document.Range().InsertXML 来覆盖其中的新值。您是否知道 Document.Range() 在其范围内不包含页眉/页脚?
    • @Shark,你有用Document.Range().InsertXML写页眉/页脚的解决方案吗?
    • .InsertXML() 只是范围对象上的一个方法,因此您应该能够使用 HeaderFooter.Range() 对象插入到页眉/页脚中。 (即 Document.Sections[1].Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range().InsertXML(...) )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多