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

异常(exception):
RuntimeBinderException occurred. "object" does not contain a definition for 'get_Range'
oSheet实例化如下:
Excel.Worksheet oSheet = new Excel.Worksheet();

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

最佳答案

好像从用作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向上编译到由编译器完成的对象可能会隐藏方法调用。

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

09-28 05:57