'Word无法执行此操作因为对话框已打开'使用Interop.Word

时间:2015-10-02 12:46:05

标签: c# printing office-interop

我有一个使用模板创建word文档的函数。创建后,它会将所有创建的文档发送到打印机。如果没有其他打开的word文档,则会正确打印它们。但是如果有另一个打开的word文档,我会看到一个警告框,上面写着“ Word无法执行此操作,因为对话框已打开 ”。关闭该框后,当我检查打印队列时,我看到列表不完整。有些文件丢失了。 有没有办法将多个word文档发送到打印队列而不关闭其他打开的word文档?

我的代码如下:

Word.Application wordApp = new Word.ApplicationClass();
Word.Document aDoc = null;
//...
aDoc = wordApp.Documents.Open();
aDoc.Activate();
aDoc.SaveAs(ref fileName, ref missing,..)
aDoc.Close();
paths.Add(fileName);
object saveChanges=false;
object obj = Missing.Value;
wordApp.Quit(ref saveChanges, ref obj, ref obj);

foreach(string var in paths)
{
   ProcessStartInfo info = new ProcessStartInfo(var);
   info.Verb = "Print";
   info.RedirectStandardError = false;
   info.Arguments = printername;
   info.CreateNoWindow = true;
   info.ErrorDialog = false;
   info.UseShellExecute = true;
   info.WindowStyle = ProcessWindowStyle.Hidden;
   Process.Start(info);
}

2 个答案:

答案 0 :(得分:0)

实际上,这听起来更像是Word配置问题,而不是编码问题。

无论如何,我挖了一下,发现了这个配置:

在您的Microsoft Word>选项>信托中心>信任中心设置>受保护的视图>取消选中所有

试一试,并发布结果。

此建议是technet.microsoft论坛上this问题的答案。

答案 1 :(得分:0)

感谢您的建议。我解决了我的问题。

我意识到,在发送到打印机期间,这些进程互相干扰。新流程在前一个流程结束之前开始。所以我需要等待以前的流程结束。 WaitForExit ()提供了。我用这种方式改变了我的代码:

foreach(string var in paths)
{
ProcessStartInfo info = new ProcessStartInfo(var);
info.Verb = "Print";
info.RedirectStandardError = false;
info.Arguments = printername;
info.CreateNoWindow = true;
info.ErrorDialog = false;
info.UseShellExecute = true;
info.WindowStyle = ProcessWindowStyle.Hidden;
Process cmd = Process.Start(info);
cmd.WaitForExit();
}

它运作顺利。

相关问题