June 8, 2021

Скрипты для новичков. Часть 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)));

}

передаем в функцию диапазон данных и столбец, фунция возвращает последнюю заполненную ячейку в столбце (6

Используем функцию в скриптах, передаем в нее наш массив данных и столбец поиска и возвращаем индекс последней строки в лог:

function getRowI(){

const data = getData();

const lr = getLastRow(data, 2)

Logger.log(lr)

}

Скрипт в pastebin (будет пополняться)

Таблица со скриптом (будет пополнятся)

Мы:

Канал “Google Таблицы” в Телеграме

Оглавление канала — все статьи

Наш чат в Телеграме

Донаты