Лист get Range выбрасывает исключение

я использую 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();

Я должен создавать экземпляры обоих по-разному?

4 ответов


похоже, что исключение выбрасывается из 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 метод по аргументам для получения внутренней ячейки и up-cast от 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, я также получил это исключение. Замена ссылок get_Range () свойством 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. После успешного обновления я получил этот "объект" не содержит определения для исключения get_Range при попытке создать отчет excel.

то, что я сделал, вместо использования ниже кода

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

я переписал на

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

и это сработало.