C#操作Word异常:消息筛选器显示应用程序正在使用中

.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;//关闭显示拼写错误提示框

猜你喜欢

转载自jiage17.iteye.com/blog/2422538
今日推荐