Сборка С# с ExcelDNA

Я конвертирую приложение VSTO в приложение, совместимое с ExcelDNA. Однако основная проблема заключается в том, что ExcelDNA не имеет объекта управления по сравнению с VSTO.

В VSTO: Microsoft.Office.Tools.Excel: вы можете добавить listObject

Worksheet worksheet = Globals.Factory.GetVstoObject(
    Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);

listObj = worksheet.Controls.AddListObject(cell, "list1");

Впоследствии вы можете установить источник данных

listObj.DataSource=list;

Однако, когда я попытался сделать это в ExcelDNA, используя Micosoft.Office.Interop.Excel, используя listObject. Я не могу получить желаемый результат, listObject вернул пустые данные.

ws=excelApp.ActiveWorkBook.ActiveSheet;
Excel.Range rng=ws.cells[1,1];
//set the datasource
rng.Value2=list;
listObj=this.ListObjects.Add(
    Excel.XlListObjectSourceType.xlSrcRange, rng,Missing.Value,
    Microsoft.Office.Interop.Excel.XlYesNoGuess.xlNo, Missing.Value);

Я не могу использовать Globals.Factory... так как это не программа VSTO. Таким образом, я придумал следующий обходной путь. Есть ли что-то, что я делаю неправильно? Я подозреваю, что проблема в ExcelDNA связана с источником данных.

Что я могу сделать, чтобы решить эту проблему? Как я могу преобразовать программу VSTO в эквивалент в ExcelDNA?


person Queryer    schedule 14.06.2011    source источник


Ответы (1)


Действительно, из надстройки Excel-DNA у вас есть доступ только к объектной модели Excel COM, а не к расширениям VSTO. Однако сборки VSTO просто взаимодействуют с Excel через COM-интерфейс, поэтому теоретически вы сможете сделать то же самое из надстройки Excel-DNA, возможно, после добавления некоторых вспомогательных классов.

Я предлагаю вам попытаться выяснить, как создать объект списка из VBA, возможно, записав и проверив некоторые макросы, которые делают то, что вы хотите. Если вы можете манипулировать Excel так, как хотите, из VBA, вы, безусловно, можете сделать то же самое из надстройки Excel-DNA.

Возможная проблема заключается в том, что я считаю, что часть объектной модели предоставляется только через интерфейс диспетчеризации COM. Такие методы не будут видны через сборку взаимодействия, и их, возможно, придется вызывать через отражение, из VB.NET или с «динамической» поддержкой в ​​C # 4. Как только вы сможете делать правильные вызовы из VBA, я счастлив чтобы помочь понять, как это сделать из надстройки Excel-DNA.

person Govert    schedule 14.06.2011