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?
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With