Excel8._Application.get_Worksheets()上的0x800A03EC错误

时间:2012-10-16 02:14:53

标签: c# excel exception vsto

我有以下代码在工作表集合中进行名称检查,如果找到该工作表则返回true。

foreach (Excel.Worksheet sheet in xlApp.Worksheets)
{
    if (sheet.Name.Equals("myXlSheet"))
    {
        resultWorkSheet = (Excel.Worksheet)xlApp.Worksheets.Item["myXlSheet"];
            return true;
    }
}

出于某种原因,xlApp.Worksheets有时会出现 0x800A03EC 错误。它似乎并不是一直发生的。我无法在开发环境中重现同样的错误,这真的让我感到困惑。

那么这里有什么问题?有什么好的想法或建议吗?谢谢。

2 个答案:

答案 0 :(得分:0)

你有Googled that error code吗?我看到有关Excel互操作的大量结果:

Excel互操作可以归结为COM,所以你得到错误的语言/上下文并不重要;它仍然可以解决你做错了什么。

看起来它是某种最大长度,无论是单元格中的文本,还是单元格数等等。

答案 1 :(得分:0)

您的代码未指定您正在使用的工作簿,因此对Worksheets的调用默认为活动工作簿(Old yet relevant MSDN)。如果以某种方式当前用户的活动工作簿不包含该工作表或没有工作簿,则会发生错误。显然,这不应该发生,但是在编程中有时几乎总会发生不可能的事情。

我没有对此进行过测试,但我假设更新问题行应该可行:

resultWorkSheet = (Excel.Worksheet)sheet.Parent.Worksheets.Item["myXlSheet"];

编辑:我想到了更多,并意识到您实际上没有指出错误发生的位置。

在尝试执行for循环之前,应检查以确保有工作簿。您可以通过获取类似的计数来检查:

if (xlApp.Workbooks.Count != 0) 
{
   //Your loop here
}