今天,我们要求用户在创建文档并使用Process.Start方法打开文件之前指定文件名和位置。
现在,我想在内存流中创建Word文档,然后打开它,最终当用户决定在Microsoft Word中保存文档时,他将不得不指定位置和名称。因此,我将不在我的应用程序中使用SaveFileDialog。
这类似于启动Microsoft Word时。默认文档被创建,当您单击保存时,您将被引导到“另存为”功能。
我该如何做到这一点?
我认为你不能仅使用内存流来完成这个任务。然而,我会将内存流保存到一个临时文件中,可以将其保存到Temp文件夹或AppData\temp等随机生成的名称中,并标记该文件为只读。然后通过System.Diagnostics.Process或其他方式打开该文件的word,由于它是只读的,当用户退出时,它将提示用户是否保存更改。
您正在使用OpenXML SDK(作为我之前提到的.Net Interop或DocX库的替代方案)。 您已经创建了一个内存中的文档对象。
现在,您希望用户能够在Word中打开文档对象(可能是为了查看),然后再将其保存(保存为用户选择的文件名)。
但您不能(轻易地)做到这一点 :)
一个选项是由sovemp提出的:
a. OpenXML写入一个临时文件(以便可以在Word中打开)
b. 将临时文件设置为只读(强制用户执行显式的“另存为”操作)
c. 使用 .Net Process.Start() 调用 MSWord(在命令行中指定您的临时文件)。
另一个选项可能是使用“预览处理程序”:
还有一种选择是在Web浏览器中服务于内存流,使用HTTP ContentType“application/msword”(例如)
最后,如果您只想让用户指定文件名(如果“预览”不是必要的),则可以弹出自己的“另存为”对话框,并直接从OpenXML将文档写入磁盘。