0

我有以下代码在工作表集合中进行名称检查,如果找到该工作表则返回 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错误。虽然它似乎并不总是发生。而且我无法在开发环境中重现同样的错误,这让我很困惑。

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

4

2 回答 2

0

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

我没有对此进行测试,但我假设将您的问题行更新为此应该可以工作:

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

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

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

if (xlApp.Workbooks.Count != 0) 
{
   //Your loop here
}
于 2012-10-16T03:09:50.340 回答
0

用谷歌搜索过那个错误代码吗?我看到了大量关于 Excel 互操作的结果:

Excel 互操作归结为 COM,因此您得到错误的语言/上下文并不重要;它仍然可能是您做错了什么的线索。

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

于 2012-10-16T02:18:00.643 回答