7

http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.get_range.aspx it says to use the Range property instead of get_Range(Object Cell1, Object Cell2).

They are both doing the same thing, Gets a Microsoft.Office.Interop.Excel.Range object that represents a cell or a range of cells. So, what's the difference except that this is a method and another is a property? Why are they pointing on use of Range[], what's the reason for it?

4

3 に答える 3

6

Range() は Range[] よりも高速です

実際に私たちはそれに気づいた。しかし、ここでそう言う理由を定義する必要があります。

このショートカットは、絶対範囲を参照したい場合に便利です。ただし、変数入力を文字列またはオブジェクト参照として処理できないため、Range プロパティほど柔軟ではありません。そのため、結局のところ、長い道のりを参照することになります。背の低い人は読みやすさを提供しますが。したがって、より多くのリソースを費やすことなく、最初のラウンドを正しく行うことができます.

なぜ遅いのですか?コンパイル中。

「実行時、Excel は常に従来の表記法を使用する (またはそう言われた)。そのため、コードをコンパイルするときに、ショートカット表記のすべての参照を従来の範囲形式に変換する必要がある (またはそう言われた)。{つまり、[A150] は Range("A150") フォームに変換する必要があります}. 私が言われたことが真実であるにせよ、Visual Basic は、コンパイルされたバージョンのコードと、コードを記述するために使用した表記法の両方を記憶する必要があります (つまり、コード モジュールにあるものは何でも)、ファイル サイズ (使用されるメモリ) のワークブック プロパティがわずかに増加します。」

ご覧のとおり、私の答えは VBA に沿ったものでした。ただし、いくつかの調査の結果、VBA 側はあまり減速しないことが証明されています。そのため、C# 側のみを処理する必要があります。@Hans は、C# の観点からより良い答えを提供します。両方を組み合わせて、優れたパフォーマンスのコードが得られることを願っています:)

Excel での Range[] と Range() のパフォーマンスに関する調査結果を次に示します。

ここに画像の説明を入力

于 2012-12-07T11:06:22.923 に答える
3

C# バージョン 4 以降を使用している場合は、Range インデクサーを使用できます。ただし、以前のバージョンでは get_Range() を使用する必要があります。

これには何か特別な点があることに注意してください。COM インターフェイスの既定のプロパティはインデクサーにマップされます。ただし、Range プロパティは Worksheet の既定のプロパティではなく、単なる通常のプロパティです。問題は、C# では、インデクサー以外のインデックス付きプロパティを宣言できないことです。C# ではなく VB.NET で動作するため、プロパティの getter メソッドを直接呼び出す必要がありました。多くの要望により、C# チームはバージョン 4 (VS2010) でこの制限を削除しました。ただし、COM インターフェイスでのみ、独自のコードでインデックス付きプロパティを宣言することはできません。

于 2012-12-07T11:35:02.913 に答える
0

私は両方を使用しましたが、どちらも同じ結果を返しました。Range []は実際にはget_Range()を内部的に使用していると思います。

命名規則の質問については、現在Range[]のみを使用しています。

于 2012-12-07T09:15:05.793 に答える