首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复在实例化Excel.Application对象时随机发生的Excel.Application错误

如何修复在实例化Excel.Application对象时随机发生的Excel.Application错误
EN

Stack Overflow用户
提问于 2019-05-28 18:45:28
回答 1查看 924关注 0票数 0

我有一个c#程序,它打开excel工作表,用一些数据填充它,并在关闭工作表之前从工作表中检索一些信息。这种情况在循环中发生过几次。程序执行一段时间,完成循环,然后在循环期间随机时间失败,出现以下错误:

System.Runtime.InteropServicdes.COMException (0x80080005):使用CLSID {xxx}检索组件的COM类因子,由于以下错误而失败: 80080005服务器执行失败(HRESULT异常:0x80080005 (CO_E_SERVER_EXCEC_FAILURE))。

我已经检查了我对Microsoft.Office.Interop.Excel的参考,它是MicrosoftExcel16.0对象库版本1.9.0.0,我已经安装了Excel2016。导致此问题的代码类似于以下代码:

代码语言:javascript
复制
for (int i = 0; i < 100; i++)
{
     Excel.Application xlApp;
     Excel.Workbooks xlWorkBooks;
     Excel.Workbook xlWorkBook;
     Excel.Sheets xlWorksheets;
     Excel.Worksheet xlWorkSheet;
     object misValue = System.Reflection.Missing.Value;

     xlApp = new Excel.Application(); //line that causes error

     xlApp.Visible = false;
     xlApp.ScreenUpdating = false;
     xlWorkBooks = xlApp.Workbooks;
     xlWorkBook = xlWorkBooks.Open(IIHSTemplate.Text, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
     xlWorksheets = xlWorkBook.Worksheets;
     xlWorkSheet = xlWorksheets["Automatic-Data-Analysis"];
     IIHSDemerit = Convert.ToDouble((xlWorkSheet.Cells[30, 14] as Excel.Range).Value2);

      xlWorkBook.Close(false, misValue, misValue);
      xlApp.Quit();

      releaseObject(xlWorksheets);
      releaseObject(xlWorkSheet);
      releaseObject(xlWorkBooks);
      releaseObject(xlWorkBook);
      releaseObject(xlApp);
}


private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
        }

我的程序将excel数据的结果写入文本文件,并在没有错误的情况下多次执行。经过随机次数的迭代(每次运行程序时,次数是不同的),程序将失败,出现上面列出的错误。关于是什么导致错误以及如何纠正错误,有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-29 21:26:44

解决方案是将Excel对象的实例化和发布从循环中移出,因为我只需要在循环中打开和关闭工作簿。感谢@SmrtGrunt在评论中指出了这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56348372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档