Определение последней строки в одном столбце

У меня есть лист с данными в столбцах от A до H

Мне нужно определить последнюю строку в столбце A которая содержит данные (все смежные – пробелы в данных / строках).

Есть также данные в других столбцах, у которых больше строк данных, чем столбец A , поэтому мне нужно изолировать только столбец A (И / или только диапазон внутри col A ).

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

 =COUNTA(A2:A100) 

Однако во всех моих исследованиях для решения Google Apps Script все, что мне кажется, это требования к выполнению нескольких функций, охватывающих десятки строк кода, включая множество материалов i++ … Что я мог бы сделать менее сложным путем смещения непосредственно из A1 ,

Может быть, существует способ изменения столбца для этого метода?

 var aLast = ss.getDataRange().getNumRows(); 

Если требуется сложный процесс, то и так. Но мне трудно представить (и еще труднее найти!) Более простое решение.

Кто-нибудь хочет просветить меня (или поп мой пузырь)?

Как насчет использования трюка JavaScript?

 var Avals = ss.getRange("A1:A").getValues(); var Alast = Avals.filter(String).length; 

Я взял эту идею из этого ответа . Метод Array.filter() работает в массиве Avals , который содержит все ячейки в столбце A. Avals конструктор нативной функции, мы возвращаем только ненулевые элементы.

Это работает только для одного столбца; если диапазон содержит несколько столбцов, то результат filter() будет включать ячейки из всех столбцов и, таким образом, будет за пределами заполненных измерений диапазона.

Хотя нет формулы straighforward, я могу думать о ней, она не требует десятков строк кода, чтобы узнать последнюю строку в столбце A. Попробуйте эту простую функцию. Используйте его в ячейке обычным способом использования какой-либо другой функции =CountColA()

 function CountColA(){ var sheet = SpreadsheetApp.getActiveSheet(); var data = sheet.getDataRange().getValues(); for(var i = data.length-1 ; i >=0 ; i--){ if (data[i][0] != null && data[i][0] != ''){ return i+1 ; } } } 

Вы можете сделать это, обратившись обратным образом. Начиная с последней строки в электронной таблице и поднимаясь до тех пор, пока вы не получите какую-то ценность. Это будет работать во всех случаях, даже если у вас есть несколько пустых строк. Код выглядит следующим образом:

 var iLastRowWithData = lastValue('A'); function lastValue(column) { var iLastRow = SpreadsheetApp.getActiveSheet().getMaxRows(); var aValues = SpreadsheetApp.getActiveSheet().getRange(column + "2:" + column + lastRow).getValues(); for (; aValues[iLastRow - 1] == "" && iLastRow > 0; iLastRow--) {} return iLastRow; } 

Я переписал функции getLastRow / getLastColumn для указания индекса строки или индекса столбца.

 function get_used_rows(sheet, column_index){ for (var r = sheet.getLastRow(); r--; r > 0) { if (sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getCell(r, column_index).getValue() != ""){ return r; break; } } } function get_used_cols(sheet, row_index){ for (var c = sheet.getLastColumn(); c--; c > 0) { if (sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getCell(row_index, c).getValue() != ""){ return c; break; } } } 

Чтобы получить количество столбцов или индекс последнего столбца:

 var numColumns = sheet.getLastColumn() 

Чтобы получить число строк или индекс последней строки:

 var numRows = sheet.getLastRow() 

где

 var sheet = SpreadsheetApp.getActiveSheet() 

Это может быть еще один способ передвижения. Возможно, вам придется поиграть с кодом в соответствии с вашими потребностями

  function fill() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.getRange('a1').activate(); var lsr = spreadsheet.getLastRow(); lsr=lsr+1; lsr="A1:A"+lsr; spreadsheet.getActiveRange().autoFill(spreadsheet.getRange(lsr), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES); }; 
 var Direction=SpreadsheetApp.Direction; var aLast =ss.getRange("A"+(ss.getLastRow()+1)).getNextDataCell(Direction.UP).getRow(); 

Вот альтернативный способ решения этого. Он использует цикл while, но учитывает пустые промежутки между строками.

 function getLastRow (column) { var iLastRow = ss.getActiveSheet().getMaxRows(); var aValues = ss.getActiveSheet().getRange(column + ":" + column).getValues(); var row = ""; while(row == ""){ row = aValues[iLastRow-1]; iLastRow--; } return iLastRow; } 

Я использую getDataRange() за которым следует getNumRows() . Первая функция

Возвращает диапазон, соответствующий размерам, в которых присутствуют данные

и вторая функция

Возвращает количество строк в этом диапазоне.

 var ss = SpreadsheetApp.getActiveSpreadsheet(); var ws = ss.getActiveSheet(); var lastRow = ws.getDataRange().getNumRows(); 

PS Я надеюсь, что это работает для всех случаев.

  • Автоматическая метка времени, когда ячейка заполнена
  • Условное форматирование электронной таблицы Google на основе другой ценности ячейки
  • Доступ к электронным таблицам Google с помощью C # с использованием API данных Google
  • Добавление кнопок в Google Таблицы и установка значения для ячеек при нажатии
  • Скрытое поле в форме Google
  • Google Spreadsheet SCRIPT Проверьте, не отредактирована ли отредактированная ячейка в определенном диапазоне
  • Есть ли способ оценить формулу, которая хранится в ячейке?
  • Единая форма Google для нескольких листов
  • Google Spreadsheet: сценарий для изменения цвета строки, когда ячейка меняет текст;
  • Interesting Posts

    Как ограничить зарядку аккумулятора на Surface Pro (2) или Windows 8 (.1)?

    Обнаружение скорости сетевого соединения и использования полосы пропускания в C #

    Есть ли какое-либо программное обеспечение или аппаратное обеспечение, которое позволяет останавливать, замедлять, ускорять или даже отменять время?

    Как использовать WebRequest для публикации данных и получения ответа с веб-страницы

    Могу ли я разместить Windows Form внутри элемента управления

    Использование удаленного рабочего стола с пользовательским DPI

    Как пройти мимо Великого брандмауэра Китая и охватить заблокированные сайты?

    Веб-скребок с Java

    Есть ли способ сделать currying в C?

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

    Можно ли изменить текст подсказки окна терминала?

    Опциональный параметр закрытия с быстрой скоростью 3

    Как использовать исполняемый файл gecko с Selenium

    Android: GLES20: вызывается нереализованным API OpenGL ES

    Уникальный идентификатор приложения для iPhone

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