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

时间:2015-11-25 20:02:29

标签: c# ms-word ms-office

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

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

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

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

我该怎么做?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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

请注意,您的应用程序可以显示它自己的“另存为”#34;对话框(或者,就此而言,可以只使用硬编码路径)独立 Word。您的程序选择路径 - 如果/准备好,您的程序会编写Word文档对象。

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

附录:

感谢您的澄清:

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

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

  3. 你不能(轻松地)这样做:)

  4. 上面的sovemp建议的一个选项:

    一个。 OpenXML写入临时文件(因此可以在Word中打开)

    湾将临时文件设置为只读(强制用户执行显式"另存为")

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

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

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

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