2011-07-01 17 views
20

私はExcelワークシートを操作するためにC#を使用しています。次の2つのコードは同じように動作しますが、一方は動作し、もう一方は例外をスローします。なぜ私は不思議です。ワークシートget_Rangeが例外をスローする

これは動作します:

oRange = (Excel.Range)oSheet.get_Range("A1","F1"); 
oRange.EntireColumn.AutoFit(); 

これは、例外がスローされます。

を:

oRange = (Excel.Range)oSheet.get_Range(oSheet.Cells[1, 1],oSheet.Cells[4,4]); 
oRange.EntireColumn.AutoFit(); 

例外:次のように

RuntimeBinderException occurred. "object" does not contain a definition for 'get_Range' 

oSheetがインスタンス化されます

私は両方を別々にインスタンス化するはずですか?

+0

"oSheet"は、一度Worksheetと一度Objectとして入力されたようです。 – TcKs

+0

上記に同意します。両方のケースでoSheetがどのようにインスタンス化されるのかを投稿できますか? – DoctorMick

+0

@Tcks、@DoctorMick、コード投稿 – KMC

答えて

32

get_rangeの引数として使用されたoSheet.Cells[1, 1]oSheet.Cells[4, 4]から例外がスローされたようです。以下を適用

は、例外がスローされません。

Excel.Range c1 = oSheet.Cells[1, 1]; 
Excel.Range c2 = oSheet.Cells[4, 4]; 
oRange = (Excel.Range)oSheet.get_Range(c1, c2); 
oRange.EntireColumn.AutoFit(); 

だから、それはoSheet.get_Range機能に関連する可能性があります。オブジェクトを引数として受け取るため、内部セルを受け取る引数にget_Rangeメソッドを呼び出そうとし、Rangeからコンパイラによって実行されたオブジェクトへのアップキャストによってメソッド呼び出しが非表示になることがあります。

行/列別のセル定義が必要な場合は、上記の方法を試してみてください。

+0

さらに収縮してoRange =(Excel.Range)oSheet.get_Range(Excel.ObjectとしてoSheet.Cells [1、1]、ExcelとしてoSheet.Cells [4、4] .Object); oRange.EntireColumn.AutoFit(); – prabhakaran

18

代わりにワークシート範囲プロパティを使用します。例えば 、代わりの

oRange = (Excel.Range)oSheet.get_Range(oSheet.Cells[1, 1],oSheet.Cells[4,4]); 

使用

oRange = (Excel.Range)oSheet.Range[oSheet.Cells[1, 1],oSheet.Cells[4,4]]; 

Iは、.NET 4クライアントプロファイルに変化したとき私は、.NET 2をオフに活用するとき、私が得た私は広範囲get_Range()メソッドを使用していましたこの例外もあります。 get_Range()参照をRangeプロパティに置き換えることで、この問題が解決されました。

+0

NirMHのソリューションは私のために働いていましたが、これも好きです(これも機能します) –

+1

明らかに、問題はフレームワーク4です。私は3.5でしたし、Get_rangeはうまくいきました。さて、ネット4の下で、get_rangeはうまく動作せず、Sheet.Range []の使用はうまく動作します。 – Simon

2

この問題を抱えているすべての人にとって、新しい変数を作成するのではなく、明示的な変換を使用する方がはるかに優れています。

oRange = (Excel.Range)oSheet.get_Range((Excel.Range)oSheet.Cells[1, 1], (Excel.Range)oSheet.Cells[4,4]); 
1

VS C#プロジェクトを.Net Framework 3.5から4.5にアップグレードしました。 正常にアップグレードした後、Excelのレポートを生成しようとするときに、この「オブジェクト」に「get_Range」例外の定義が含まれていません。私が何をしたか

ではなく、コード

range = xlSheet.get_Range(Cells[xlRow, xlCol], Cells[xlRow, xlCol]); 

の下に使用するのでは私は

range = xlSheet.Range[Cells[xlRow, xlCol], xlSheet.Cells[xlRow, xlCol]]; 

に書き直しそして、それは働いています。

関連する問題