我们希望在我们的数据库中存储Microsoft Word模板。然后我们希望允许用户编辑模板文件,然后将它们存储回数据库。在这种情况下使用的最佳策略是什么?
如果我们在单独的进程中运行Word,这是否可行?即不在我们的申请中托管。如果是这样,这将涉及监视磁盘上的文件以进行更改,因为这听起来很糟糕。有了这个想法,我们想从内存流中打开文件,永远不要让它接触磁盘。但我们愿意接受建议。
将其写入磁盘的问题可能是:
一旦从临时文件或文件夹中打开了单词,用户就创建了一个新文档而没有保存,那么就没有关闭单词。 (所以我们无法判断进程何时完成)或者删除了临时文件或文件夹。我想要解决方案,我可以控制单词,也许在应用程序中托管它。我不想把它写到文件中。任何想法?
答案 0 :(得分:2)
对于编辑,我会将文件下载到临时文件夹,然后在您的应用程序中我将使用自动化启动Word:
Application app = new Application();
app.Visible = true;
Document doc = app.Documents.Open("path to temp file");
这些行将启动Word并打开您的文件。 然后,您可以监视文档和Word实例发生的情况,当用户保存它时,只需将文件上传回数据库。
您可以通过执行以下行来隐藏和/或关闭此实例:
app.Visible = false;
app.Quit();
请注意,您必须参考Microsoft.Office.Interop.Word
汇编
答案 1 :(得分:1)
我能想到将文档下载到内存并完全避免磁盘的唯一方法是创建一个ram磁盘,但这可能会非常复杂,需要管理员安装来安装ramdisk driver。
关于进程和文件监视,您可以启动带有必要参数的word.exe来打开文档,但是您仍然需要监视文件以进行更改,并且外部进程必须知道用户何时退出单词。如果用户从不保存文件或关闭单词,那么您无能为力。 Word不会公开进程外事件模型。
答案 2 :(得分:0)
您必须将Word Doc从数据库中拉到可在某处访问的文件(即在临时目录或ramdisk中)。
您可以为VBA“save”事件设置事件处理程序,因此在保存文档时,您可以将更改后的Word Doc上传回数据库。
就像@Chris所说,如果用户从不保存文件或从不关闭单词,那么你就无能为力了。