.net环境,C#语言开发,操作word时,出现异常,而异常是在数据量多的时候出现,数据量相对较少时不出现。显然不是权限问题。
经验证,怀疑是word拼写检查造成的。
当向word 插入大量数据后,word 的自动拼写检查检测到大量的拼写错误,于是word 弹出了一个提示框,提示用户存在过多的拼写错误。而我们程序操作word 是让word 运行在后台,所以程序并不知道word弹了一个对话框。当程序继续向word 插入数据时,因为word 的对话框阻塞的word 的进程,所以就会报“消息筛选器显示应用程序正在使用中”错误。
本次异常的信息如下:
消息筛选器显示应用程序正在使用中。 (异常来自 HRESULT:0x8001010A (RPC_E_SERVERCALL_RETRYLATER))
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Runtime.InteropServices.COMException: 消息筛选器显示应用程序正在使用中。 (异常来自 HRESULT:0x8001010A (RPC_E_SERVERCALL_RETRYLATER))。
源错误:
行 19190: object missingValue = Type.Missing;
行 19191: object doNotSaveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
行 19192: doc.Close(ref doNotSaveChanges, ref missingValue, ref missingValue);
行 19193: appword.Application.Quit(ref miss, ref miss, ref miss);
行 19194: doc = null;
源文件: d:\VisualStudio2013\Projects\SmartTDMP20170907\Cmdi.Smart.BLL\Report.cs 行: 19192
堆栈跟踪:
[COMException (0x8001010a): 消息筛选器显示应用程序正在使用中。 (异常来自 HRESULT:0x8001010A (RPC_E_SERVERCALL_RETRYLATER))]
Microsoft.Office.Interop.Word.DocumentClass.Close(Object& SaveChanges, Object& OriginalFormat, Object& RouteDocument) +0
Cmdi.Smart.BLL.Report.ProjectDesignSafeReport(String cProjectGuid) in d:\VisualStudio2013\Projects\SmartTDMP20170907\Cmdi.Smart.BLL\Report.cs:19192
SmartTMP.ControllersAddDesignF.DesignManageController.exportDesignReport() in d:\VisualStudio2013\Projects\SmartTDMP20170907\SmartTMP\Controllers\DesignManageController.cs:7183
lambda_method(Closure , ControllerBase , Object[] ) +101
为了避免这个错误,使用word操作函数关闭word的拼写检查,问题解决了。
appword = new Microsoft.Office.Interop.Word.Application();
appword.Visible = false;
object objTrue = true;
object objFalse = false;
object objDocType = Microsoft.Office.Interop.Word.WdDocumentType.wdTypeDocument;
doc = (Microsoft.Office.Interop.Word.DocumentClass)appword.Documents.Add(ref tempeletePath, ref objFalse, ref objDocType, ref objTrue);
doc.SpellingChecked = false;//关闭拼写检查
doc.ShowSpellingErrors = false;//关闭显示拼写错误提示框