Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Worksheet get_Range throws exception

Tags:

c#

excel

I'm using C# to manipulate an Excel worksheet. The following two pieces of code should work the same, but one works and the other throws an exception. I wonder why.

This works:

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

This throws an exception:

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

Exception:

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

The oSheet is instantiated as follows:

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

Am I supposed to instantiate both differently?

like image 398
KMC Avatar asked Jul 01 '11 10:07

KMC


2 Answers

It looks like the exception is thrown from the oSheet.Cells[1, 1] and oSheet.Cells[4, 4] used as arguments to get_range.

Applying the following, no exception will be thrown:

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();

So, it might be related to the oSheet.get_Range functionality. It receives an object as an argument, therefore it might try to invoke a get_Range method on the arguments to receive the internal cell, and the up-cast from Range to object done by the compiler might hide the method call.

If you need the cells definition by row/column - try using the above approach.

like image 199
NirMH Avatar answered Nov 13 '22 19:11

NirMH


Use the Worksheet Range property instead. For example, instead of

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

use

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

I was using the get_Range() method extensively when I leveraged off .NET 2. When I changed to .NET 4 Client Profile, I got this exception also. Replacing the get_Range() references with the Range property addressed this issue for me.

like image 28
stormypete Avatar answered Nov 13 '22 18:11

stormypete