掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Excelの参照設定を行わず、遅延バインディングを回避するには? (ID:146075)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> クラス名.SetRange("A1").Value = "テスト" まず、Excel.Range オブジェクトの解放処理(Marshal.ReleaseComObject)を どのタイミングで行う予定でしょうか? 通常通り、利用側に処理させる仕様にするのであれば、 x = クラス名.SetRange("A1") x.Value = "テスト" Marshal.ReleaseComObject(x) となるでしょう(あるいは、IDisposable にして Using させるか…)。 一方、解放の責務を(利用側では無く)クラス側に負わせるなら、先の回答のように (案1) クラス名.SetValue("A1", "テスト") の構文にして、 解放処理をこのメソッド内に収める。 (案2) クラス名.SetRange("A1").Value = "テスト" の構文で SetRange が返すオブジェクトを、 Excel の Range クラスではなく、COM オブジェクトを含まないマネージクラスにする。 (そしてこれが先の、「Value プロパティを持った自作クラス」の話に繋がってきます。) などが考えられます。案2の実装は大変そうですけれども。 (他にも手はあるでしょうが、どの方法が良いのかはケースバイケースかと) > と使用したいのは一部です。 もちろん、Value 以外のメンバも実装しなければなりませんね。 その場合、どの範囲までを対象としますか? 単に Excel の Range オブジェクトを扱うだけでも、200 以上のメンバ定義が ありますし、Excel のバージョンによっても定義に差があるのが現状です。 結果、参照設定無しで運用する場合、 (a) 一部のメンバーのみをカプセル化する。 (b) すべてのメンバーをカプセル化する。 (c) レイトバインドで運用する。 の選択が必要になってきます。b 案は理想ですが、現実的では無いでしょうね。 >> (相手が Object 型でなければ、拡張メソッドという手が使えますが…) > 上記の例をご教授願えませんでしょうか? 下記の拡張メソッドの解説記事を参照してみてください。 http://msdn.microsoft.com/ja-jp/magazine/cc163317.aspx
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.