May 5, 2021

Как мы добавляли лист "про нас" в сто Таблиц

Привет, сегодня рассмотрим конкретную рабочую задачу – мы нарисовали лист "⚡️ ПРО НАС", с нашими ссылками и решили добавить этот лист во все Таблицы с примерами, которые были опубликованы на канале за почти пять лет.

(мы решили, что это улучшит конверсию в оглавление / чат / и ботов заказывайте!)

В задаче два этапа – сначала мы создаём список Таблиц, в которые будем добавлять наш лист, а потом проходимся по этому списку и этот лист добавляем.

Создаём список Таблиц

Сейчас в оглавлении нашего канала 368 постов. Таблица с примером приложена не к каждому, но все равно Таблиц много, где-то сто. Найдём все нужные Таблицы.

1. Сперва создаём запрос для DriveApp: нам нужны файлы, в которых я владелец, с mimeType Таблицы и эти файлы должны быть открыты для всех по ссылке:

function q() {

var userEmail = Session.getActiveUser().getEmail()

return `'${userEmail}' in owners and mimeType = 'application/vnd.google-apps.spreadsheet' and (visibility = 'anyoneWithLink' or visibility = 'anyoneCanFind')`;

}

2. Используем этот запрос в функции, которая создаст реестр Таблиц и вставит его на активный лист

function searchDOCs() {

var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()

var array = []

var t = 0

var max = 5000

var query = q();

var files = DriveApp.searchFiles(q())

while (files.hasNext() && t < max) {

t++

var file = files.next();

try {

array = array.concat([[file.getName(), file.getUrl(), file.getSharingAccess(), file.getDateCreated(), file.getOwner().getEmail()]]);

} catch (err) { }

}

var r = ss.getRange(4, 1, array.length, array[0].length)

r.clearContent()

r.setValues(array)

}

3. Вставляем скрипт в Таблицу, запускаем, скрипт создаёт массив с названием файлов / ссылками на них/ типом доступа / датой создания и владельцем

4. Дополнительно фильтруем по имени. Обычно в названии Таблиц с нашими примерами есть @google_sheets, поэтому дополнительно фильтруем формулой массив, чтобы оставить в нём файлы с google в названии:

Добавляем в каждую Таблицу лист "⚡️ ПРО НАС".

Еще помните, что мы тут делаем? :) Список Таблиц мы подготовили, теперь вставляем в Таблицу со скриптом лист, который будет копировать и пишем функцию копирования.

Функция ниже идёт диапазону с ссылками (у меня он i:i) открывает каждую Таблицу, проверяет, если ли в ней лист с названием '⚡️ ПРО НАС', если нет, то копирует этот лист из Таблицы со скрипом и переименовывает (так как при копировании к названию листа добавится (копия).

const shName = '⚡️ ПРО НАС';

function myFunction() {

const ss = SpreadsheetApp.getActive();

const sh = ss.getActiveSheet()

const template = ss.getSheetByName(shName);

const range = sh.getRange("i1:i100")

const colours = range.getBackgrounds();

range.getValues()

.forEach((url, i) => {

url = url[0];

if (url && colours[i][0] != 'red') {

const shTo = SpreadsheetApp.openByUrl(url);

const shToCheck = shTo.getSheetByName(shName);

if (!shToCheck) {

template.copyTo(shTo).setName(shName);

Logger.log('OK ' + shTo.getName())

sh.getRange("i" + (i + 1)).setBackground('red')

}

}

})

}

Код целиком: https://pastebin.com/Cp5wB3J0


МЫ:

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

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

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

Донаты