无法转换透明代理以键入“Microsoft.Office.Interop.Excel.Worksheet”

时间:2012-05-25 04:16:16

标签: c# excel vsto spreadsheet

迭代电子表格中的所有工作表我遇到了此错误消息:
无法转换透明代理以键入“Microsoft.Office.Interop.Excel.Worksheet”。

此电子表格包含一些明显无法投放到工作表的图表标签。因此,当我运行此代码时,我收到上述错误:

foreach (Microsoft.Office.Interop.Excel.Worksheet activeSheet in xlApp.Sheets)
{

}

我环顾四周寻找解决方案并且有一些人遇到过它 - 在不同的情况下对我来说,例如: http://social.msdn.microsoft.com/forums/en-US/vsto/thread/ab2e917a-d3bf-4e6a-84dc-7f8a9440fe0a

到目前为止,我对我的解决方法不满意。我觉得异常应该例外使用,而这不是其中之一:

for (int i = 0; i < xlApp.Sheets.Count; i++)
{
    try
    {
        Worksheet wk = (Worksheet)xlApp.Sheets[i];
    }
    catch (Exception)
    {
        //This isn't a sheet - avoid sheet operations
    }
}

我想知道是否有人知道如何在不需要Try-Catch的情况下迭代Sheets(跳过非工作表)? Excel对象模型中是否有某些方法或属性可以告诉您工作表是否真的不是工作表?

1 个答案:

答案 0 :(得分:4)

怎么样:

foreach (object possibleSheet in xlApp.Sheets)
{
    Microsoft.Office.Interop.Excel.Worksheet aSheet = possibleSheet as Microsoft.Office.Interop.Excel.Worksheet;
    if (aSheet == null)
        continue;

    // your stuff here
}

当然,只有当您只为图表标签而不是其他表格获得例外时,它才会起作用。