Visual Studio2010を使用してVSTOExcelアドインを作成し、Microsoftが正当な開発者の道に投げ込む障害のほとんどをなんとか回避した後、最終的に敗北を認めなければなりません。
私のプロジェクトには、いくつかのコントロールを備えたリボン、ユーザーがRESTfulインターフェイスを介してデータベースを検索できるカスタム作業ウィンドウ、およびこのデータをワークシートに配置できるRTDサーバーが含まれています。これまでのところ、これまでのところ...まあ、苦痛だと思います。Interop、ComVisibility、AppDomains(なんて素晴らしいアイデアでしょう!)との多くの苦労の後、私の現在の状況は次のようになります。
ワークシートでは、次のようにRTDのラッパー関数を呼び出します(省略)。
Public Function call(value as String)
Dim addin as Office.ComAddIn
Set addin = Application.ComAddIns("MyAddin")
addin.Object.RTD(value)
End Function
これは、アドインクラス(の一部)です。
namespace Some
{
[Guid("...")]
[ComVisibleAttribute(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class MyAddin {
[snip]
public String RTD(String value)
{
String returner = null;
try
{
returner = Globals.ThisAddin.Application.WorksheetFunction.RTD(SERVERID, "", value);
}
catch(COMException ce)
{
returner = ce.StackTrace;
}
return returner;
}
}
}
そして、RTDサーバークラスの関連部分:
namespace Some
{
[Guid("...")]
[ComVisibleAttribute(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("MyRTDServer")]
public class Server : Excel.IRtdServer
{
[snip]
}
}
デバッグモードIの場合:
- 空の新しいブックを作成します
- 「=RTD(...)」数式をセルに追加します
- ラッパー関数呼び出し「=call(...)」をセルに追加します
- ブックを保存する
- ブックを開く
- デバッグを停止して、再開します
- ブックを開く
私は観察します:
- 3では、すべてが正常に機能します
- 5では、すべてが正常に機能します
- 7で、セルを再計算する
Unable to get the RTD property of the WorksheetFunction class
と、3)のセルと2)のセルで例外が発生し#N/A
ます。ただし、トピックがRTDサーバーに登録されており、データが利用可能になるとすぐに、例外が正しいデータに置き換えられていることがわかります。また、セルを再計算しないと、保存された値が表示され、データが利用可能になると、取得された値に正しく更新されます。
デプロイモードの場合、次のことを確認します。
- 2で、私は得る
#N/A
- 3で、
Unable to get the RTD property of the WorksheetFunction class
例外が発生します
何か助けてください?:(
編集:
空白のアドインプロジェクトで非常に基本的なRTDサーバーを使用して同じ手順をテストすると、まったく同じ結果が表示され#N/A
ます。サーバーがデータを使用できるようになる前にRTD式が再計算された場合、ロードされたExcelファイルが表示されます。質問したいのですが:WTF?
乾杯、チェ