'Word cannot do this because a dialog box is open' 使用 Interop.Word 时出错
'Word cannot do this because a dialog box is open' error in using Interop.Word
我有一个使用模板创建 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);
}
实际上这听起来更像是 Word 配置问题而不是编码问题。
无论如何,我稍微挖掘了一下,发现了这个配置:
在您的 Microsoft Word > 选项 > 信任中心 > 信任中心设置 > 受保护的视图 > 取消选中所有
试一试,请 post 结果。
此建议是 technet.microsoft 论坛上 this 问题的答案。
感谢您的建议。我解决了我的问题。
我意识到,在发送到打印机的过程中,进程相互干扰。新进程在前一个进程结束之前开始。所以我需要等待之前的流程结束。 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();
}
而且工作顺利。
我有一个使用模板创建 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);
}
实际上这听起来更像是 Word 配置问题而不是编码问题。
无论如何,我稍微挖掘了一下,发现了这个配置:
在您的 Microsoft Word > 选项 > 信任中心 > 信任中心设置 > 受保护的视图 > 取消选中所有
试一试,请 post 结果。
此建议是 technet.microsoft 论坛上 this 问题的答案。
感谢您的建议。我解决了我的问题。
我意识到,在发送到打印机的过程中,进程相互干扰。新进程在前一个进程结束之前开始。所以我需要等待之前的流程结束。 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();
}
而且工作顺利。