Я создаю ListObject в Excel, используя VSTO следующим образом:
ListObject lo = ws_vsto.Controls.AddListObject(range, "MyList");
(Переменная диапазона - это ранее определенный диапазон.)
Если я затем перебираю коллекцию Controls рабочего листа, я могу найти этот ListObject.
Однако, если я сохраню книгу и снова открою ее, коллекция Controls будет пустой. Как я могу вернуть этот ListObject после повторного открытия, чтобы продолжить работу с ним?
EDIT
У меня есть немного дальше:
var wb = Globals.ThisAddIn.Application.ActiveWorkbook;
var wb_vsto = wb.GetVstoObject();
foreach (Excel.Worksheet ws in wb.Worksheets)
{
var wsv = ws.GetVstoObject();
foreach (Excel.ListObject l in ws.ListObjects)
{
MessageBox.Show(l.Name);
var lo = wsv.Controls.AddListObject(l);
Excel.Range range = lo.Range;
range.Activate();
}
}
Когда я попадаю на строку var lo =, у меня есть ListObject, добавленный в коллекцию Controls и доступный для использования. Однако это свойство DataSource содержит значение null. Есть ли простой способ вернуть исходный источник данных?
Затем я подумал о восстановлении источника данных на основе информации в диапазоне. Строка range.Activate () выбирает список в Excel (так что я знаю, что это правильно). Однако я не могу на всю жизнь понять, как вывести данные из этого диапазона и получить адрес диапазона. В документации MSDN говорится о свойстве Address, но, похоже, оно не существует. (Документация MSDN для VSTO в лучшем случае кажется странной).