Сборка C # с ExcelDNA - PullRequest
       13

Сборка C # с ExcelDNA

2 голосов
/ 14 июня 2011

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

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

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?

1 Ответ

0 голосов
/ 15 июня 2011

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

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

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

...