Одна неясная проблема заключается в том, вызывается ли интерфейс IDTExtensibility2 в этом классе COM, когда библиотека загружается только как надстройка автоматизации для обеспечения функций UDF. AFAIK Интерфейс IDTExtensibility2 проверяется и вызывается при активации сервера UDF, даже если он не зарегистрирован как «Надстройка COM» в Excel. Но я не проверял в последнее время.
я есть работающая надстройка автоматизации на основе 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? Чего мне не хватает?
Спасибо,
Фрэнк