Excel の 1 つのインスタンスで適切に動作する C# RTDServer があります。次のように定義されています。
[Guid("1D50EF28-A1BE-4BE9-9214-46A48085ADFF")]
[ProgId("Acme.RtdServer")]
public class RTDServer : IRtdServer
{
// IRtdServer members:
// ...
}
サーバーが「接続」されているときのExcel呼び出し
#region IRtdServer Members
public int ServerStart(IRTDUpdateEvent CallbackObject)
{
_callback = CallbackObject;
}
その後、更新を収集できることを Excel に通知するために使用できるコールバック オブジェクトを使用します。
_callback.UpdateNotify();
問題は、Excel の 2 番目、3 番目などのインスタンスがある場合、ServerStart
呼び出されないことです。つまり、新しい更新の準備ができていることを Excel に通知できません。ここの MS KB 記事では、アウトプロセス RTDServer の同様の動作が提案されています。私の実装は、スレッド化されたインプロセス RTDServer です。
Acme.RtdServer
複数のインスタンスで同じサーバーを使用できるようにしたいと考えています。Bloomberg Excel API がそれを達成しているように見えるので、それは可能であるに違いありません。これを達成する方法を知っている人はいますか?
編集: RTD() への呼び出しは UDF でラップされます:
public object ACME_UDF(string ItemID, string TopicName, bool OtherData = false)
{
if (string.IsNullOrEmpty(ItemID) || string.IsNullOrEmpty(TopicName))
return "...";
try
{
return _xlApp.WorksheetFunction.RTD("acme.rtdserver", null, ItemID, TopicName, OtherData);
}
catch (Exception)
{
return "Failed to retrieve [" + ItemID + "] with [" + TopicName + "]";
}
}
ありがとう