我正在使用C#来操作Excel工作表。以下两段代码应该相同,但一个工作,另一个抛出异常。我想知道为什么。
这有效:
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
实例化如下:
Excel.Worksheet oSheet = new Excel.Worksheet();
我是否应该以不同方式实例化?
答案 0 :(得分:36)
看起来,oSheet.Cells[1, 1]
和oSheet.Cells[4, 4]
作为get_range
的参数抛出异常。
应用以下内容,不会抛出任何异常:
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
到对象的向上转换可能会隐藏方法调用。
如果您需要按行/列定义单元格 - 请尝试使用上述方法。
答案 1 :(得分:25)
请改用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时,我也得到了这个例外。用Range属性替换get_Range()引用为我解决了这个问题。
答案 2 :(得分:5)
对于遇到此问题的每个人,更好地使用显式转换,而不是创建新变量。
oRange = (Excel.Range)oSheet.get_Range((Excel.Range)oSheet.Cells[1, 1], (Excel.Range)oSheet.Cells[4,4]);
答案 3 :(得分:5)
我已将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]];
它有效。