工作表get_Range引发异常

本文关键字:异常 Range get 工作 | 更新日期: 2023-09-27 18:00:46

我正在使用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();

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

工作表get_Range引发异常

看起来异常是从用作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到对象的上转换可能会隐藏方法调用。

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

请改用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]];

当我充分利用get_Range()方法时,我广泛地使用了它。NET 2。当我换成的时候。NET 4客户端配置文件,我也得到了这个异常。用Range属性替换get_Range()引用为我解决了这个问题。

对于每个有这个问题的人来说,最好使用显式转换,而不是创建新的变量。

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。一旦我成功升级,当我尝试生成excel报告时,我得到这个"对象"不包含"get_Range"异常的定义。

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

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

我重写到

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

它奏效了。

我试过上面的答案。NET 5,但它们不再工作。相反,下面的代码是有效的。

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