RTD関数をラップするC#でExcel Automationアドインを作成するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/5398152

質問

rtdserverベースの自動化アドインが機能しています。
RTDServerを使用して、C#でリアルタイムExcelオートメーションアドインを作成するにはどうすればよいですか?.

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");
    }
}

Excelのセルに「= CountDown(150)」を入力すると、ConnectDataによって返されるが更新されない150の初期値が表示されます。登録すべきコールバックはありますか?アプリケーションオブジェクトを正しくインスタンス化していますか?何が足りないの?

ありがとう、

フランク

役に立ちましたか?

解決

実際、あなたは正しいアプリケーションオブジェクトを保持していません。 1つの解決策は、を実装することです idtextensibility2 アドインのインターフェイス。このインターフェイスには、アドインをロードするときにExcelが呼び出すオンカネクションメソッドがあります。この方法では、後で使用するためにローカル変数に保持できるアプリケーションオブジェクトに渡されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top