工作表get_Range抛出exception

我正在使用C#来操作Excel工作表。 下面的两段代码应该是一样的,但是一段可以工作,另一段则会抛出exception。 我想知道为什么。

这工作:

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

这引发了一个exception:

 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实例化如下:

 Excel.Worksheet oSheet = new Excel.Worksheet(); 

我应该以不同的方式实例化吗?

它看起来像是从oSheet.Cells[1, 1]oSheet.Cells[4, 4]作为get_range参数get_range

应用以下,不会抛出exception:

 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_Rangefunction有关。 它接收一个对象作为参数,因此它可能试图调用参数的get_Range方法来接收内部单元格,而从编译器完成的从Range到Object的上传可能会隐藏方法调用。

如果您需要按行/列定义单元格,请尝试使用上述方法。

改用Worksheet Range属性。 例如,而不是

 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]]; 

当我利用.NET 2时,我广泛使用了get_Range()方法。当我更改为.NET 4 Client Profile时,我也遇到了这个exception。 用Range属性replaceget_Range()引用为我解决了这个问题。

对于每个有这个问题的人,最好使用显式转换,而不是创build新的variables。

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

我已经将我的VS C#项目从.NET Framework 3.5升级到4.5。 一旦我升级成功,我就得到这个“对象”不包含“get_Range”exception的定义,当试图生成一个Excel报告。

我所做的是不使用下面的代码

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

我重写了

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

它的工作。