Лист 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]];
и это сработало.