我有一个使用模板创建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);
}
答案 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();
}
它运作顺利。