Как я читаю привязки данных для Excel ListObject
У меня есть приложение Excel 2010 Excel 2007. У меня есть ListObject, связанный с источником данных объекта через источник привязки. Я хочу, чтобы определить, какое свойство моего объекта имеет любой объект ListColumn в моей коллекции ListColumns ListObject. В приведенном ниже примере я использую имя столбца, чтобы найти столбец, привязанный к свойству «Field1». Однако в моей ситуации имя столбца может отличаться от имени свойства. В объекте 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
- Событие Excel VSTO NewWorkbook не возникает при запуске
- жизненный цикл объекта для COM-объектов, переданных из .NET в VBA
- Пробные периоды / срок действия проектов VSTO VB?
- Не удается отладить надстройку excel vsto. Excel открывается и закрывается немедленно
- Объединенные ячейки VSTO
- Как Excel RTD вызывает IRtdServer.DisconnectData ()?
- Обновление надстройки VSTO Excel
- Обновить Excel ListObject из приложения командной строки
- Как использовать vb.net для сохранения встроенного ресурса проекта (excel worksheet) на рабочем столе пользователя
- Excel Add On: Range to String Error; VB.Net
- Неверно для правильного использования Полученного последовательного порта данных
- VSTO: фокус приложения
- Выбор Excel VSTO
У меня похожая ситуация, и мне нужны диаграммы, связанные с столбцами в 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