1

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の場合:

  1. 空の新しいブックを作成します
  2. 「=RTD(...)」数式をセルに追加します
  3. ラッパー関数呼び出し「=call(...)」をセルに追加します
  4. ブックを保存する
  5. ブックを開く
  6. デバッグを停止して、再開します
  7. ブックを開く

私は観察します:

  • 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?

乾杯、チェ

4

1 に答える 1

2

「RTD プロパティを取得できません....」というエラーは、関数呼び出しでエラーがあったことを示す Excel オブジェクト モデルの方法にすぎません。

RTD サーバーは、アドインの残りの部分に依存していますか? 2) デプロイ時に失敗するという事実は、RTD サーバーが正常に実行される前に、他のビットを初期化する必要があるように見えます。VSTO アドインを組み立てる方法では、アセンブリは RTD サーバーと COM アドインに対して完全に別々に読み込まれる可能性が高く、問題のあるケースでは RTD インスタンスが最初に読み込まれます。

おそらく、独自の RTD サーバーではなく、サンプルの RTD サーバーでテストして、エラーがラッパーや VSTO アドインの他の場所ではなく、そこにあることを確認することができます。次に、RTD サーバーを掘り下げて、何が問題なのかを確認できます。

-ガバメント

Excel-DNA - Excel 用の無料で簡単な .NET

于 2011-02-23T06:33:06.167 に答える