Скрипты для новичков. Часть 2 | @google_sheets
Часть 1 – обращаемся к текущей Таблице, к выбранному листу, забираем диапазон заполненных ячеек и разбираемся, что нам возвращается.
Часть 2:
Итак, у нас есть массив с данными. Разберёмся, как обращаться к нему, как посчитать количество строк, как найти последнюю строку вообще, последнюю строку в выбранном столбце, последний столбец.
0) Создадим новую функцию, в которой обратимся к функции, которая возвращает все ячейки с данными
function part2() {
const data = getData();
....
1) Поехали. Обращаемся к выбранной строке
Чтобы обратиться к элементу массива нужно написать:
название массива[номер элемента]
(Учитываем, что нумерация элементов массива в JS начинаются с 0, поэтому нулевой элемент - первый)
Обращаемся к первой строке нашего массива, выводим её в лог:
function getRows() {
const data = getData();
Logger.log(data[0])
}
2) Первая строка, пятый столбец
Добавляем [4]
-> data[0][4]
Помним, что элементы массивов начинаются с 0, поэтому обращаясь data[0][4]
к массиву, который сформирован из данных, которые мы забрали из листа - мы обращаемся к первой строке и пятому столбцу.
3) Определяем индекс (номер) последней строки
Используем метод length
, метод возвращает число элементов массива.
Если применить его к нашему массиву массивов – метод вернёт количество внутренних массивов, в нашем случае - строк.
const data = getData();
Logger.log(data.length);
Чудно, последняя строка действительно двенадцатая.
4) Обращаемся к последней строке
Длина массива - 12 строк, индексация массивов в JS начинается с 0, поэтому, чтобы обратиться к последней строке, нам нужно обратиться к 11 элементу (длина массива - 1)
data[length - 1]
5) Оставляем только строки с данными
В нашем случае 12 - это еще и количество строк с данными, но это только потому, что в середине нашего массива нет пустых строк.
С помощью filter
и some
мы сможем гарантировано отфильтровать наш массив от пустых строк, метод оставит строки с заполненной хотя бы одной ячейкой.
Поменяем данные, пусть они выглядят так.
И отфильтруем:
//фильтруем массив от пустых строк
const rowsWithData = data.filter(t => t.some(t => t))
Logger.log(rowsWithData)
Logger.log(rowsWithData.length)
rowsWithData
– отфильтрованный с помощью filter
массив из скриншота выше, теперь он без пустых строк;
rowsWithData.length
– количество строк отфильтрованного массива – их 6;
6) Находим последнюю строку с данными в выбранном столбце
Для этого используем любой цикл, который переберёт наши строки, возвращая индекс строки, если выбранный столбец содержит значение.
например
function getLastRow(data, column) {
var lr;
for (x in data) {
if (data[x][column - 1]) {
lr = x;
}
}
return lr*1 + 1;
}
или
function getLastRow(data, column){
return Math.max(...(data.map((g, i) => !g[column-1] ? '' : ++i)));
}
Используем функцию в скриптах, передаем в нее наш массив данных и столбец поиска и возвращаем индекс последней строки в лог:
function getRowI(){
const data = getData();
const lr = getLastRow(data, 2)
Logger.log(lr)
}
Скрипт в pastebin (будет пополняться)
Таблица со скриптом (будет пополнятся)
Мы:
Канал “Google Таблицы” в Телеграме