2010-09-18 43 views
1

J'ai une application de classeur VS 2010 Excel 2007. J'ai un ListObject qui est lié à une source de données d'objet via une source de liaison. Je veux être capable de déterminer quelle propriété de mon objet ListColumn obecte dans la collection ListColumns de ma ListObject est liée. Dans l'exemple ci-dessous, j'utilise le nom de la colonne pour trouver la colonne liée à la propriété "Field1". Cependant, dans ma situation, le nom de la colonne peut être différent du nom de la propriété. Il n'existe aucune propriété DataMember, DataPropertyName ou similaire sur un objet ListColumn, comment puis-je déterminer quelle colonne est liée à quelle propriété?Comment lire les liaisons de données pour un objet ListObject Excel

Compte tenu de la classe et ListObject ci-dessous, je veux être en mesure d'utiliser le code suivant:



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 

Répondre

2

J'ai une situation similaire et j'ai besoin chiffre colonnes lié sur Excel. Malheureusement, le VSTO cache les champs où les informations sont stockées.

La seule façon d'accéder à cette information par System.Reflection.

Voir ci-dessous le petit exemple:

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; 
    } 

J'espère vous aider!

Teobaldo