工作表get_Range抛出异常

KMC*_*KMC 26 c# excel

我正在使用C#来操作Excel工作表.以下两段代码应该相同,但一个工作,另一个抛出异常.我想知道为什么.

这有效:

oRange = (Excel.Range)oSheet.get_Range("A1","F1");
oRange.EntireColumn.AutoFit();
Run Code Online (Sandbox Code Playgroud)

这引发了一个异常:

oRange = (Excel.Range)oSheet.get_Range(oSheet.Cells[1, 1],oSheet.Cells[4,4]);
oRange.EntireColumn.AutoFit();
Run Code Online (Sandbox Code Playgroud)

例外:

RuntimeBinderException occurred. "object" does not contain a definition for 'get_Range'
Run Code Online (Sandbox Code Playgroud)

oSheet实例化如下:

Excel.Worksheet oSheet = new Excel.Worksheet();
Run Code Online (Sandbox Code Playgroud)

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

Nir*_*rMH 38

它看起来像是抛出异常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();
Run Code Online (Sandbox Code Playgroud)

因此,它可能与oSheet.get_Range功能有关.它接收一个对象作为参数,因此它可能会尝试get_Range在参数上调用接收内部单元格的方法,并且Range编译器从向上执行的向上转换可能会隐藏方法调用.

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


小智 27

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

oRange = (Excel.Range)oSheet.get_Range(oSheet.Cells[1, 1],oSheet.Cells[4,4]);
Run Code Online (Sandbox Code Playgroud)

使用

oRange = (Excel.Range)oSheet.Range[oSheet.Cells[1, 1],oSheet.Cells[4,4]];
Run Code Online (Sandbox Code Playgroud)

当我利用.NET 2时,我广泛使用了get_Range()方法.当我改为.NET 4 Client Profile时,我也得到了这个例外.用Range属性替换get_Range()引用为我解决了这个问题.

  • 显然,问题出在框架4上。我使用的是3.5,Get_range运行正常。现在,在.net4下,get_range将无法工作,并且使用Sheet.Range []可以正常工作 (2认同)

Ale*_*gur 5

对于遇到此问题的每个人,更好地使用显式转换,而不是创建新变量.

oRange = (Excel.Range)oSheet.get_Range((Excel.Range)oSheet.Cells[1, 1], (Excel.Range)oSheet.Cells[4,4]);
Run Code Online (Sandbox Code Playgroud)


Sai*_*rty 5

我已将VS C#项目从.Net Framework 3.5升级到4.5。成功升级后,在尝试生成Excel报告时,我得到的“对象”不包含“ get_Range”异常的定义。

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

range = xlSheet.get_Range(Cells[xlRow, xlCol], Cells[xlRow, xlCol]);
Run Code Online (Sandbox Code Playgroud)

我改写为

range = xlSheet.Range[Cells[xlRow, xlCol], xlSheet.Cells[xlRow, xlCol]];
Run Code Online (Sandbox Code Playgroud)

而且有效。