Подтвердить что ты не робот

Исходное литье get_Range исключает исключение

Я использую С# для управления листом 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();

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

4b9b3361

Ответ 1

Похоже, что исключение выбрано из 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 к объекту, выполняемому компилятором, может скрыть вызов метода.

Если вам требуется определение ячеек по строке/столбцу - попробуйте использовать вышеприведенный подход.

Ответ 2

Вместо этого используйте свойство Range Worksheet. Например, вместо

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 Client Profile, я получил это исключение. Замена ссылок get_Range() с использованием свойства Range затронула эту проблему для меня.

Ответ 3

Для всех, у кого есть эта проблема, гораздо лучше использовать явное преобразование, а не создавать новые переменные.

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

Ответ 4

Я обновил проект VS С# с .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]];

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