Получение максимального номера строки / столбца из диапазона Excel

У меня есть определенный Range , например:

 Range rng = activeWorksheet.Range["A1", "B50"]; 

Я извлекал максимальный номер строки и столбца, используемый в этом Range , перебирая его и присваивая номер строки моей переменной, но должен быть лучший способ? Я делал это:

 int maxRow = 0; foreach (Range row in rng.Rows) maxRow = row.Row; 

Я думаю, что нашел самое элегантное решение для этого, что-то вроде этого:

 int maxRow = rng.Row + rng.Rows.Count - 1; int maxColumn = rng.Column + rng.Columns.Count - 1; 

rng.Row будет извлекать первый использованный номер строки в диапазоне, rng.Rows.Count - 1 будет извлекать общее количество строк, используемых в этом диапазоне, и мы также вычитаем 1 чтобы получить правильный максимальный номер строки.

Как насчет поиска последней используемой строки?

 public int FindLastFilledRowInRange(Range range) { var cell = range.Find("*", SearchOrder: Excel.XlSearchOrder.xlByRows, SearchDirection: Excel.XlSearchDirection.xlPrevious); return cell.Row; } 

Если вы начинаете позже строки 1, вы можете просто сделать некоторую дополнительную математику в возвращаемой строке …

Если вы не против оценки строки Address … с помощью «.EntireRow.Address (False, False)», мы получаем строку, которая легко анализируется …

C # …

 int maxRow = range.EntireRow.Address(false, false).Split(",:".ToCharArray()).Select(n => int.Parse(n)).Max(); string maxCol = range.EntireColumn.Address(false, false).Split(",:".ToCharArray()).Select(s => s.PadLeft(3)).Max().Trim(); 

VB …;

 Dim maxRow As Integer = -1 Dim maxCol As String = "" range = ws.Range("$BB9:$C11") maxRow = range.EntireRow.Address(False, False).Split(",:".ToCharArray()).Select(Function(n) Integer.Parse(n)).Max() ' 9:11 maxCol = range.EntireColumn.Address(False, False).Split(",:".ToCharArray()).Select(Function(s) s.PadLeft(3)).Max().Trim() ' C:BB 

заданный диапазон BB9: C11

maxRow – 11 из 9:11 … если не разобрать int, тогда Max () будет равен 9 из-за сортировки строк

maxCol является «BB» от C: BB … если не заполнен слева, то Max () будет «C» из-за сортировки строк

 range = ws.Range("A1:A3,AE15:AE9,C4:C7") maxRow = range.EntireRow.Address(False, False).Split(",:".ToCharArray()).Select(Function(n) Integer.Parse(n)).Max() ' 1:3,9:15,4:7 maxCol = range.EntireColumn.Address(False, False).Split(",:".ToCharArray()).Select(Function(s) s.PadLeft(3)).Max().Trim() ' 1:3,9:15,4:7 

и заданный диапазон непересекающихся диапазонов: A1: A3, AE15: AE9, C4: C7

maxRow составляет 15 от 1: 3,9: 15,4: 7 … даже с нескончаемым диапазоном и не соответствует порядку = AE15: AE9

maxCol является «AE» из C: AE … даже с несмежным диапазоном

это работает с целым выбором COLUMN «A: A»

это НЕ работает с целым выбором строки "3: 3"

У меня было это по предыдущему проекту:

 wb = excel.Workbooks.Open(fileName); worksheet = wb.ActiveSheet; Range usedRange = worksheet.UsedRange; this.lastRow = usedRange.Rows.Count; this.lastCell = usedRange.Columns.Count; 

Использование lastRow даст вам emptylines, которые в моем случае нам не полезны.

  • Powerpoint Изменить диаграмму Ширина легенды
  • Не удается сохранить файл excel в c #, если он не дает ошибку только для чтения?
  • Excel Interop: форматирование нижних колонтитулов
  • C # Excel - не освобождение через interop - макросы и Solver
  • Сбой COMException
  • Диапазон интерполя Excel находит содержимое всей ячейки
  • Interop.Excel CultureInfo
  • Удаление всех QueryTables в Excel 2007 Workbook
  • Загрузка Excel XML и преобразование в бинарный формат Excel 2003
  • Одновременное копирование нескольких рабочих листов для сохранения ссылок на диаграммы
  • Программно создавать экземпляр Excel и загружать все надстройки
  • Interesting Posts

    Excel VBA: ошибка OLEDB Connection.CommandText

    Цикл через запрос данных на основе значений, введенных в поле ввода и пользовательскую форму

    Ссылка на именованные диапазоны в функции диапазона (Excel – VBA)

    Использование ClassType: = "Forms.ListBox.1" приводит к тому, что 1004 не может вставить ошибку объекта

    Прикрепление нескольких файлов к Outlook Email в цикле

    Переименуйте рабочий лист Excel без использования Excel.Interop

    Проверьте строку заголовка листа Excel для определенного столбца

    Копировать запрос доступа к Excel через VBA (ошибка 3343)

    Разделение конкретной информации в одной ячейке excel нескольким другим

    Чтобы прочитать файл Excel с ASP.Net Excel, необходимо установить на сервер?

    Excel VBA: уничтожает ли коллекция объектов каждый объект?

    Изменение dd / mm / yyyy hh: mm: ss to dd / mm / yyyy с помощью VBA Macro

    Диапазон прохождения от элемента управления RefEdit в пользовательской форме до массива вариантов

    Идентификатор записи xml с одним шагом

    Запуск Excel из C # идет на задний план

    Давайте будем гением компьютера.