如何从内存流中打开Word文档

Igo*_*vas 5 c# ms-word ms-office

在我们的 WPF 应用程序中,我们必须创建一个 Word 文档并自动打开它。

今天,我们要求用户在创建文档之前指定文件名和位置,然后使用 Process.Start 方法打开文件。

现在,我想在内存流中创建 Word 文档,打开它,最终,当用户决定将文档保存在 Microsoft Word 中时,他必须指定位置和名称。所以我不会在我的应用程序中使用 SaveFileDialog。

这与启动 Microsoft Word 时类似。将创建一个默认文档,当您单击“保存”时,您将引导至“另存为”功能。

我怎样才能做到这一点?

sov*_*emp 5

我认为你不能纯粹在内存流上做到这一点。但是,我会将内存流保存到临时文件,方法是保存到 Temp 文件夹或 AppData\temp 或类似的具有随机生成名称的文件,然后将该文件标记为只读。然后打开该文件上的word(使用System.Diagnostics.Process或您正在执行的任何操作),并且由于它是只读的,因此它会要求用户在退出时保存更改。


pau*_*sm4 2

只需使用标准 Microsoft.Interop.Word .Net 命名空间以编程方式创建一个新的 Word 文档:

请注意,您可能需要安装 MS-Office 才能执行此操作。

另请注意,您的应用程序可以独立于 Word显示自己的“另存为”对话框(或者就此而言,可以仅使用硬编码路径) 。您的程序选择路径 - 如果/当准备就绪时,您的程序将写入 Word 文档对象。

最后,这是一个替代的开源库DocX

附录:

感谢您的澄清:

  1. 您正在使用 OpenXML SDK(作为我上面提到的 .Net Interop 或 DocX 库的替代方案)。您已经创建了一个内存中文档对象。

  2. 现在您希望用户能够在保存文档对象(以他/她自己选择的文件名)之前在 Word 中打开文档对象(大概是为了审阅它)。

  3. 你不能(轻易)做到这一点:)

  4. 上面 sovemp 建议的一种选择:

    A。OpenXML 写入临时文件(以便可以在 Word 中打开)

    b. 将临时文件设为只读(以强制用户执行显式“另存为”)

    C。使用 .Net Process.Start() 调用 MSWord(在命令行中指定临时文件)。

  5. 另一种选择可能是使用“预览处理程序”:

  6. 还有另一种选择可能是在 Web 浏览器中提供内存流,使用 HTTP ContentType“application/msword”(例如)

  7. 最后,如果您只想让用户指定文件名(如果“预览”不是必需的),您可以随时弹出自己的“另存为”对话框并直接从 OpenXML 将文档写入磁盘。