首页 > 解决方案 > OpenXML 可以用来启动一个新的 Word 实例吗?

问题描述

我能够毫无问题地生成 Word 文档。我将生成的 *.docx 文件保存到一个临时位置,然后需要在 Word 中启动该文件。

要求是不要在 Word 中“打开”文件(使用Process.Start轻松完成),而是将其作为新的未保存文件加载到 Word 中。这是因为当用户保存文件时,Word 的某些适当集成需要接管,如果文件已准备好保存,则不要启动,而是要保存到磁盘上的某个位置。

我通过对 Word 应用程序使用 Interop 调用来实现这一点,将新文档添加到 Word 的工作区。我的问题是 Interop 往往会在各种客户端计算机上中断,尤其是在进行 Office 升级时(比如客户端有 32 位 Office,但升级为 64 位版本)。

我对 OpenXML 有点陌生,但它可以用于自动化 Word 还是 Interop 是我唯一真正的选择?

object oFilename = tmpFileName;
object oNewTemplate = false;
object oDocumentType = 0;
object oVisible = true;
Document document = _application.Documents.Add(ref oFilename, ref oNewTemplate, ref oDocumentType, ref oVisible);

标签: ms-wordopenxml-sdk

解决方案


不,Open XML 技术无法与 Office (Word) 应用程序交互 - 它仅用于文件创建/操作。需要互操作才能对 Word 应用程序执行任何操作。

有一种方法可以解决这个问题 - 只有 Word 才有可能,其他 Office 应用程序都没有 - 就是将 Open XML 内容转换为 OPC 平面文件格式。这会将组成 zip 文件的各种包“连接”成纯文本字符串,本质上是单个 XML 文件。

然后可以使用通过“互操作”的方法将 OPC 平面文件格式的 XML 内容写入已经打开(甚至是新创建的)Word 文档。Range.InsertXML在某种程度上,这会将 Open XML 内容“流式传输”到打开的 Word 文档中。

这种方法的问题是某些文档级别的属性不会写入目标文档,因此无法更改打开文档的所有方面。例如:页面大小、方向、页眉、页脚……因此,如果还需要影响此类事情,则此类设置需要互操作。


推荐阅读