1

我正在尝试编写一个函数,该函数返回一个字符串,该字符串表示当前在 Excel 中选择的对象类型。

现在,这就是我所拥有的:

public String GetExcelType(dynamic thing)
{   
    if(thing.GetType().GetProperty("ChartStyle") != null)
    {
        return "[CHART]";
    }
    else if (thing.GetType().GetProperty("Cells") != null)
    {
        return "[TABLE]";
    }

    return "[UNKNOWN]";
}

然后后来调用:

GetExcelType(oExcelApp.ActiveWindow.Selection);

问题是,它每次都返回“[UNKNOWN]”。

进一步混淆了这个问题,弹出一个调试会话,我们可以清楚地看到该对象具有有问题的属性(在本例中为“Cells”):

在此处输入图像描述

dynamic.GetType().GetProperty("foo")从其他几个问题中提取了一点(每个人似乎都同意这应该有效)但它似乎失败了,在这里。我究竟做错了什么?

4

2 回答 2

3

您可能会发现此函数对于查找 COM 对象的类型很有用:

Microsoft.VisualBasic.Information.TypeName(oExcelApp.ActiveWindow.Selection)
于 2013-11-13T01:50:42.240 回答
2

这似乎是您需要的:http: //fernandof.wordpress.com/2008/02/05/how-to-check-the-type-of-a-com-object-system__comobject-with-visual-c-网/

然后你可以做类似的事情:

public String GetExcelType(dynamic thing)
{   
    Type type = GetExcelTypeForComObject(thing)
    if(type == typeof(Microsoft.Office.Interop.Excel.Chart))
    {
        return "[CHART]";
    }
    else if (type == typeof(Microsoft.Office.Interop.Excel.Range))
    {
        return "[TABLE]";
    }

    return "[UNKNOWN]";
}
于 2013-11-13T01:50:40.093 回答