2011-03-22 5 views
1

나는 RtdServer 기반 자동화 추가 기능을 가지고 있습니다 :
How do I create a real-time Excel automation add-in in C# using RtdServer?. RTM 함수를 래핑하는 Excel 자동화 추가 기능을 C#으로 어떻게 만듭니 까?

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에서 셀로 업데이트 ConnectData에 의해 그러나 결코 반환 (150)의 초기 값을 보여줍니다. 등록해야하는 콜백이 있습니까? Application 개체를 올바르게 인스턴스화합니까? 내가 뭘 놓치고 있니?

감사합니다,

프랭크 실제로

답변

2

는, 당신은 바로 응용 프로그램 개체의 보류를 받고되지 않습니다. 한 가지 해결책은 추가 기능에 IDTExtensibility2 인터페이스를 구현하는 것입니다. 이 인터페이스에는 추가 기능을로드 할 때 Excel에서 호출하는 OnConnection 메서드가 있습니다. 이 메서드에서는 나중에 사용할 수 있도록 로컬 변수에 유지할 수있는 Application 개체가 전달됩니다.

+0

나는 이것을 조사 할 것이다. .. 팁을위한 감사합니다! – Frank

+0

아직 체크하지 않았으며 IDTExtensibility2가 자동화에 사용되지 않는다고 제안하는 기사 (http://blogs.officezealot.com/whitechapel/archive/2005/04/10/4514.asp)가 있습니다. 추가 기능. 그렇다면 Excel 추가 기능에 대한 Excel-DNA와 같은 somethiong를 사용하는 것이 .NET에서이 작업을 수행하는 유일한 방법 일 수 있습니다. – Govert

+0

하지만이 Stackoverflow 대답을 http://stackoverflow.com/questions/1998824/help-with-excel-automation-addin, 마이크 강조 꽤 격렬하게 IDTExtensibility2 응용 프로그램 개체를 잡아 자동화 추가 기능에 구현할 수 있습니다 . – Govert