Работа с ячейками в Гугл Таблице
  • Ігор Білецький
  • 22.11.2021
  • Коментарі відсутні

Сегодня разберем, как с помощью скрипта работать с отдельной ячейкой гугл таблицы. Пост является дополнением к основной статье по гугл скриптам и программным решениям при работе с гугл таблицей.

Поэтому, если вы у нас впервые, рекомендую вначале ознакомится с указанными материалами, а мы продолжим.

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

Перед тем, как начинать, примем за основу, что у нас в переменной sheet лежит объект лист, которому мы можем обращаться с помощью данной переменной.

Как работать с листом, описано ЗДЕСЬ.

Идем дальше.

Для начала обратимся к ячейке.

let myCell = sheet.getActiveCell();
let myCell = sheet.getRange("A2");
let myCell = sheet.getRange(2,1);

В первом случае мы обратились к активной ячейке (где находится курсор), в остальных  — обратились по адресу — ячейка «А2», она же ячейка на второй строке первого столбца.

Вам выбирать, как и каким способом пользоваться (второй и третий — по сути одно и то же).

Получить значение ячейки

let a1 = myCell.getValue(); //в переменной a1 значение нашей ячейки

Записать в ячейку новое значение

myCell.setValue("Новое значение"); //записать в нашу ячейку строку "Новое значение"

Получить формулу, что используется в ячейке

let formula = myCell.getFormula();

Задать формулу для нашей ячейки

let formula = "=SUM(H9:H10)";
myCell.setFormula(formula);

Обратите внимание, что вы создаете новую формулу с помощью обычной строки. Соответственно, вы можете создать формулу любой сложности, используя переменные в качестве аргументов при конструировании строки с формулой.

Узнать координаты (номер строки и колонки) ячейки

let IndexRow = myCell.getRowIndex(); //номер строки
let IndexColumn = myCell.getColumn(); //номер колонки

Также вы можете узнать адрес ячейки в буквенном виде (типа «A2»). Для этого необходимо воспользоваться специальной командой getA1Notation().

К примеру, чтобы получить адрес нашей ячейки, нужно написать

let address = myCell.getA1Notation();

В результате в переменной address будет адрес нашей ячейки (к примеру, «D5»).

Сдвиг от текущей ячейки (смещение фокуса)

let CountRows = 2; //на сколько строк смещаться вниз от текущей ячейки
let CountColumns = 1; //на сколько колонок смещаться вправо от текущей ячейки
let newCell = myCell.offset(CountRows,CountColumns); //можно задавать отрицательные значения. Нужно учитывать, чтобы координаты новой ячейки не выходили за пределы листа, иначе возникнет ошибка

Форматирование ячейки.

Часто нам при решении определенных задач необходимо применить различные форматирования к нашей ячейке, например, установить цвет текста или задать числовой формат для удобочитаемости.

Приведу в качестве примера несколько реализаций форматирования.

myCell
  .setFontColor('#ff0000')
  .setFontStyle('italic')
  .setBackground('#ffff00')
  .setFontSize(20)
  .setFontWeight('bold');

Данным скриптом мы устанавливаем для нашей ячейки цвет текста (setFontColor), тип шрифта курсив (setFontStyle), цвет заливки ячейки (setBackground), размер шрифта (setFontSize) и делаем шрифт жирным (setFontWeight).

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

Также часто приходится задавать числовое форматирование ячейки или отформатировать ее, как дату. Приведу решение.

myCell
  .setNumberFormat('dd.MM.yyyy HH:mm:ss');//применяем формат - дата + время
myCell
  .setNumberFormat('#,##0.00');//число вида 1 200 123,55

Соответственно, вы можете выводить в ячейке только дату или применять форматирование числа на свое усмотрение.

Также можно объединять ячейки, применить выравнивание, перенос текста и пр. (при объединении сохраняется значение левой верхней (первой) ячейки выделенного диапазона.

sheet.getRange('C1:E2')
.merge() //объединяем ячейки
.setWrapStrategy(SpreadsheetApp.WrapStrategy.WRAP) //перенос текста
.setHorizontalAlignment('center') //горизонтальное выравнивание
.setVerticalAlignment('middle'); //вертикальное выравнивание

Вставка изображения с интернет-ресурса в заданную ячейку

let LinkLogo = "https://zhyttia-prekrasne.com/IRPIN-kids-Fest_1.png"; //ссылка на логотип
let AddresLogo = "=IMAGE(" + '"' + LinkLogo + '"' + ")"; //генерируем формулу для вставки изображения в ячейку
myCell.setFormula(AddresLogo);// вставляем формулу в ячейку

Подобная задача возникла у меня, когда я создавал макрос, который обрабатывал таблицу с данными всех участников песенного конкурса (их было около 100 человек) и по каждому их них генерировал специальный бланк, который потом раздавали судьям. Работу данного скрипта можно посмотреть в этом видео.

Если изображение большое, нужно либо объединить несколько ячеек в одну и потом вставлять изображение, либо сделать размер ячейки больше.

Изменение размера ячейки.

Особенность. Изменение размера работает для всего листа для заданной через индексы (строка, колонка) определенной ячейки или диапазона

let IndexRow = myCell.getRowIndex(); //номер строки
let IndexColumn = myCell.getColumn(); //номер колонки
let NewHeight = 150; //новая высота ячейки
let NewWidth = 150; //новая ширина ячейки
sheet.setRowHeight(IndexRow, NewHeight); //устанавливаем высоту ячейки
sheet.setColumnWidth(IndexColumn, NewWidth); //устанавливаем ширину ячейки

Еще пример реализации. Мы объединим несколько ячеек, увеличим размеры итоговой (объединенной) ячейки, закрасим ее в желтый и обведем черной рамкой:

let MyRange = MySpreadSheet.getRange('F6:G7').activate().merge();
let IndexRow = MyRange.getRowIndex(); //номер строки
let IndexColumn = MyRange.getColumn(); //номер колонки
let NewHeight = 200; //высота
let NewWidth = 250; //ширина
MySpreadSheet.setRowHeight(IndexRow, NewHeight); //устанавливаем высоту ячейки
MySpreadSheet.setColumnWidth(IndexColumn, NewWidth); //устанавливаем ширину ячейки
MyRange
.setBackground('#ffff00') //заливка желтым
.setBorder(true, true, true, true, null, null, '#000000', SpreadsheetApp.BorderStyle.SOLID); //обводка черной рамкой

Конечно же, вы можете скриптом применять для вашей ячейки условное форматирование. Подробности читайте здесь.

Также хочу порекомендовать обзорную статью с различными решениями, скриптами и прочими полезностями при работе с гугл таблицами.

Кстати, если наш сайт принес вам пользу и вы хотите сказать нам «Спасибо» и поддержать нас 🙏, то это можно сделать ЗДЕСЬ.

 
Рекомендую почитать:

 

Залишити коментар

Есть клиенты? Используйте CRM в Гугл Таблице для учета

Підтримати сайт! Дякуємо!

Подякувати і подтримати сайт