【发布时间】:2016-03-31 07:06:13
【问题描述】:
我目前有一个 word 文档。文件合并程序,并试图打开一个特定的 Word 文档。取决于用户的选择。
// sample of code used:
string outputFolder = null;
...
// file selection
...
string outcomeFolder = outputFolder;
string outputFile = "Combined Folder " + fileDate + " @ " + fileTime + ".docx";
string outputFileName = Path.Combine(outcomeFolder, outputFile);
在程序中,outputFolder 由用户通过fileBrowserDialog 选择
目前,该程序运行正常并合并用户选择的文件夹中的文件,但无法打开 Microsoft Word 以及合并的结果文档。
我尝试过使用:
Microsoft.Office.Interop.Word.Application officeApp =
new Microsoft.Office.Interop.Word.Application();
...
// merging code
...
Document documentTest = officeApp.Documents.Open(outputFileName);
我注意到虽然程序无法启动 Word,但任务管理器会继续创建 Word 的新实例。形成的合并文档也无法删除,因为它声称该文件当前正在使用中。就好像程序在后台打开但没有物理启动一样。在编辑/删除合并文件之前,必须终止 Word 的任务管理器实例
有什么建议可以解决这个问题吗?我错过了一些简单的东西还是由于非静态文件路径而导致的问题? - 如果需要任何其他信息,请询问。谢谢你
更新 1:
由于实施officeApp.Visible = true;,程序现在启动创建的文件,然后可以编辑/重新保存等。但是,如果我立即再次运行程序,尝试在同一文件夹中创建另一个合并文件等。我会看到@ 987654327@
更新 2: 如上所述,我得到了一个通用的 HRESULT 错误代码,我现在已经对其进行了补救。我将“新officeApp”移到“合并”处理程序中,该处理程序似乎允许快速连续多次合并而不会引发错误。
更新 3:
为了让事情更简单,我尝试实现Process.Start(outputFileName); 来打开文档。这是由于我现在介绍的附加复选框允许用户决定是否合并文档。将在创建后启动/呈现。如果文件可见性设置为 false,此新代码还可以防止创建其他 Word.exe。
感谢大家的建议和帮助。
【问题讨论】:
-
你的程序是作为用户运行还是作为服务用户运行的服务,比如Local System?也许您的代码是正确的,但用户是错误的。检查额外的 Word.exe 进程。哪个用户在运行它?
-
看看你的代码..你甚至调试它或校对你写的代码..
outputFolder你初始化为null然后outputFileName你正在做Path.Combine(null, outputFile)你永远不要分配outputFolder -
stackoverflow.com/questions/16253215/1874522/#16298284
-
@methodman - outputFolder 以 null 开头,但会根据用户选择而变化。一旦用户为合并文件选择了他们的输出目的地,outputFolder 将成为该目的地。
标签: c#