在我们的WPF应用程序中,我们必须创建一个Word文档并自动打开它。
今天我们要求用户在创建文档之前指定文件名和位置,然后使用Process.Start方法打开文件。
现在,我想在内存流中创建Word文档,打开它,最终,当用户决定将文档保存在Microsoft Word中时,他必须指定位置和名称。所以我不会在我的应用程序中使用SaveFileDialog。
这与启动Microsoft Word时类似。创建默认文档,单击“保存”时,将引导至“另存为”功能。
我该怎么做?
答案 0 :(得分:4)
我认为你不能纯粹在内存流上做到这一点。但是,我会将内存流保存到临时文件,方法是保存到Temp文件夹或AppData \ temp或类似随机生成的名称,然后将该文件标记为只读。然后在该文件上打开word(使用System.Diagnostics.Process或者你正在这样做),并且由于它是只读的,它会要求用户在退出时保存更改。
答案 1 :(得分:2)
使用标准的Microsoft.Interop.Word .Net命名空间以编程方式创建一个新的Word文档:
请注意,您可能需要安装MS-Office才能执行此操作。
请注意,您的应用程序可以显示它自己的“另存为”#34;对话框(或者,就此而言,可以只使用硬编码路径)独立 Word。您的程序选择路径 - 如果/准备好,您的程序会编写Word文档对象。
最后,这是一个替代的开源库DocX:
http://www.codeproject.com/Articles/660478/Csharp-Create-and-Manipulate-Word-Documents-Progra
How to: Open a word processing document from a stream (Open XML SDK)
附录:
感谢您的澄清:
您正在使用OpenXML SDK(作为我上面提到的.Net Interop或DocX库的替代品)。您已经创建了一个内存中的文档对象。
现在您希望用户能够在保存之前打开Word中的文档对象(可能是为了查看它)(在他/她自己选择的文件名中)。
你不能(轻松地)这样做:)
上面的sovemp建议的一个选项:
一个。 OpenXML写入临时文件(因此可以在Word中打开)
湾将临时文件设置为只读(强制用户执行显式"另存为")
℃。使用.Net Process.Start()调用MSWord(在命令行中指定临时文件)。
另一种选择可能是使用"预览处理程序":
另一种选择可能是使用HTTP ContentType" application / msword"在Web浏览器中提供内存流。 (例如)
最后,如果您想要的只是让用户指定文件名(如果"预览"不是必不可少的),您可以随时弹出自己的"保存作为"对话框并直接从OpenXML将文档写入磁盘。