Как создать надстройку автоматизации Excel в C #, которая оборачивает функцию RTD? - PullRequest
2 голосов
/ 23 марта 2011

У меня есть работающая надстройка автоматизации на основе RtdServer:
Как создать надстройку автоматизации Excel в режиме реального времени в C # с помощью RtdServer? .

Создание оболочки VBA тривиально:

Function RtdWrapper(start)
    RtdWrapper = Excel.Application.WorksheetFunction.RTD("StackOverflow.RtdServer.ProgId", "", start)
End Function

Это работает. Я попытался создать оболочку C # следующим образом:

[ClassInterface(ClassInterfaceType.AutoDual)]
public class RtdWrappers
{
    private readonly Microsoft.Office.Interop.Excel.Application _application = new Application();

    public object Countdown(object startingCount)
    {
        var start = Convert.ToInt32(startingCount.ToString());
        return _application.WorksheetFunction.RTD("StackOverflow.RtdServer.ProgId", string.Empty, start);
    }

    [ComRegisterFunctionAttribute]
    public static void RegisterFunction(Type t)
    {
        Microsoft.Win32.Registry.ClassesRoot.CreateSubKey("CLSID\\{" + t.GUID.ToString().ToUpper() + "}\\Programmable");
    }

    [ComUnregisterFunctionAttribute]
    public static void UnregisterFunction(Type t)
    {
        Microsoft.Win32.Registry.ClassesRoot.DeleteSubKey("CLSID\\{" + t.GUID.ToString().ToUpper() + "}\\Programmable");
    }
}

Когда я ввожу "= Обратный отсчет (150)" в ячейку в Excel, она показывает начальное значение 150, которое возвращается ConnectData, но никогда не обновляется. Есть ли обратный звонок, который я должен зарегистрировать? Правильно ли я создаю экземпляр объекта Application? Что мне не хватает?

Спасибо

Франк

1 Ответ

2 голосов
/ 27 марта 2011

Действительно, вы не получаете нужный объект Application.Одним из решений является реализация интерфейса IDTExtensibility2 в вашей надстройке.Этот интерфейс имеет метод OnConnection, который Excel будет вызывать при загрузке надстройки.В этом методе вам передается объект Application, который вы можете сохранить в локальной переменной для дальнейшего использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...