我如何阅读Excel ListObject的数据绑定

时间:2010-09-18 19:59:26

标签: excel vsto ms-office excel-2007 office-2007

我有一个VS 2010 Excel 2007 Workbook应用程序。我有一个ListObject,它通过绑定源绑定到对象数据源。我希望能够确定我的ListObject的ListColumns集合中任何给定的ListColumn对象的对象的属性是什么。在下面的示例中,我使用列名来查找绑定到“Field1”属性的列。但是,在我的情况下,列名称可以与属性Name不同。 ListColumn对象上没有DataMember,DataPropertyName或类似属性,如何确定哪个列绑定到哪个属性?

鉴于下面的类和ListObject,我希望能够使用以下代码:



return FindColumn(MyDataListObject, "Property1")




Public Class MyData
    Public Property Field1 As String
    Public Property Field2 As Date
End Class

   Public Function FindColumn(ByVal listObject As ListObject, 
ByVal propertyName As String) As ListColumn
        For Each col As ListColumn In listObject.ListColumns
            If col.Name = propertyName Then
                Return col
            End If
        Next
        Return Nothing
    End Function

1 个答案:

答案 0 :(得分:2)

我有类似的情况,我需要Excel上的图形绑定列。

不幸的是,VSTO隐藏了存储信息的字段。

通过System.Reflection访问此信息的唯一方法。

见下面的小例子:

    public static string[] GetListObjectMappedColumns(ListObject listObject)
    {
        Tools.ListObject vstoListObject = Globals.Factory.GetVstoObject(listObject);
        FieldInfo fieldInfo = vstoListObject.GetType().GetField("mappedProperties", BindingFlags.Instance | BindingFlags.NonPublic);
        object value = fieldInfo.GetValue(vstoListObject);
        if (value is PropertyDescriptor[])
        {
            List<string> result = new List<string>();
            foreach (PropertyDescriptor propertyDescriptor in (PropertyDescriptor[])value)
                result.Add(propertyDescriptor.Name);
            return result.ToArray();
        }
        return null;
    }

我希望能帮到你!

Teobaldo