Рабочий лист get_Range выдает исключение - PullRequest
26 голосов
/ 01 июля 2011

Я использую 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 ]

37 голосов
/ 02 июля 2011

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

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

26 голосов
/ 22 октября 2013

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

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

5 голосов
/ 09 марта 2016

Я обновил свой проект VS C # с .Net Framework 3.5 до 4.5.После успешного обновления я получил, что этот «объект» не содержит определения для исключения «get_Range» при попытке создать отчет Excel.

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

* 1004 я сделал следующее*

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

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

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

5 голосов
/ 10 февраля 2014

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

oRange = (Excel.Range)oSheet.get_Range((Excel.Range)oSheet.Cells[1, 1], (Excel.Range)oSheet.Cells[4,4]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...