0

NetOffice.ExcelApi.Worksheet追加のフィールドを含む「カスタム」ワークシートが必要なので、クラスをサブクラス化したいと思います。この新しいクラスのインスタンスの構築の一環として、基本クラスのコンストラクターを呼び出したいと思います。つまり、基本的にはレギュラーWorksheetが必要ですが、いくつかの追加フィールドを設定し、それにいくつかの追加機能を持たせる必要があります。

と 新規 を作成するにはどうすればよいWorksheetですか? これまでのところ、クラスのAddメソッドのみを使用してきました。このメソッドはSheets自動的にこれを行い、それをシートに追加します。私が知る限り、Worksheetクラスのコンストラクターは親オブジェクトを取得する必要があり (取得するのに問題はありません)、COM プロキシが渡されます。これを行うにはどうすればよいですか?

4

2 に答える 2

0

Excelでの作業にはNPOIを使用することをお勧めします。インストールされたExcelは必要ありません。NuGet から入手できます。サンプルはこちら. この助けを願っています。

于 2015-03-18T20:57:53.993 に答える
0

まず第一に、コードプレックスで数日間回答しようとしましたが、システムの劣化に関する通知がありました。(codeplex は現在議論中です。完全な議論: http://netoffice.codeplex.com/discussions/587938 )

あなたのことを正しく理解できていないか、COM がどのように機能しているかを理解していない可能性があります。Application.ActiveSheet を呼び出すたびに、新しいものが得られます!!! インスタンス(アプリケーションからのプロキシ)もちろん、COM-Server上の同じインスタンス(現在のシートが変更されていない場合)ですが、要求するたびに新しいインスタンス/プロキシを取得します. (NetOffice の各インスタンス/プロキシ インスタンスを明示的に破棄する必要はありません。さらに、"==" または "!=" を使用してローカル プロキシ インスタンスを簡単に比較できますが、これは NetOffice の魔法にすぎません)

キャッシュ戦略を要求または使用するたびに、Worksheet インスタンスを再キャストする必要があります。

私にできることは、NetOffice Factory Core でイベントを開催することです。このようなもの:

//Event Trigger Example
private NetOfficeCore_OnCreateInstance(object newInstance, ref Type replaceTo)
{
      Worksheet sheet = newInstance as WorkSheet;
      if(null != sheet && sheet.Name = "MySheet")
      {
            replaceTo = typeof(MyCustomWorkSheet);
      }
}

この例では、「MySheet」という名前のすべてのシートが、カスタム タイプに自動的に置き換えられます。(もちろん Application.ActiveSheet をカスタムタイプに変換する必要があります)

今日このイベントを作成し、新しいリリースを作成できるように、ご意見をお聞かせください*。

*セバスチャン (免責事項: NetOffice の著者)

于 2015-04-07T09:46:39.747 に答える