Вы можете достичь всего этого с помощью отдельного скрипта. Создайте автономный сценарий и выполните следующие действия:
Шаг 1. Получите идентификаторы электронных таблиц
Сначала вам нужно будет получить id
различных электронных таблиц на общем диске. Вы можете сделать это в самом скрипте Служб Google, если используете Advanced Drive Service
(см. Справочник ниже). Чтобы активировать эту службу, от go до Resources > Advanced Google services...
в редакторе сценариев и включите Drive API
.
Затем напишите функцию, которая будет возвращать массив электронной таблицы ids
на общем диске. Вам придется позвонить Drive.Files.list
для этого. Это может быть что-то вроде следующих строк (пожалуйста, напишите ваш общий driveId
в соответствующей строке):
function getFileIds() {
var params = {
corpora: "drive",
driveId: "your-shared-drive-id", // Please change this accordingly
includeItemsFromAllDrives: true,
q: "mimeType = 'application/vnd.google-apps.spreadsheet'",
supportsAllDrives: true
}
var files = Drive.Files.list(params)["items"];
var ids = files.map(function(file) {
return file["id"];
})
return ids;
}
Шаг 2: Создайте триггеры для каждой электронной таблицы
Установите onEdit
запускать программно для каждой из электронных таблиц (триггер редактирования запускает функцию каждый раз, когда редактируется соответствующая электронная таблица, поэтому я предполагаю, что это именно тот триггер, который вам нужен). Для этого будет использоваться ids
, полученный на шаге 1. Это может быть что-то похожее на это:
function createTriggers(ids) {
ids.forEach(function(id) {
var ss = SpreadsheetApp.openById(id);
createTrigger(ss);
})
}
function createTrigger(ss) {
ScriptApp.newTrigger('sendDataOnEdit')
.forSpreadsheet(ss)
.onEdit()
.create();
}
Функция createTriggers
получает массив ids
в качестве параметра и для каждого id
создает триггер onEdit
: каждый раз, когда любой из Эти электронные таблицы редактируются, будет запускаться функция sendDataOnEdit
, и именно здесь вы захотите вызвать конечную точку API с информацией об отредактированной ячейке.
Шаг 3. Вызовите конечную точку API
. Функция sendDataOnEdit
должна получить данные из отредактированной ячейки и отправить их куда-нибудь.
function sendDataOnEdit(e) {
// Please fill this up accordingly
var range = e.range;
var value = range.getValue();
UrlFetchApp.fetch(url, params) // Please fill this up accordingly
}
Во-первых, он может получить информацию о ячейке, отредактированной с помощью объекта события, переданной функции в качестве параметра e
(вы можете получить ее столбец, ее строку, ее значение, лист и электронная таблица, где он находится, и т. д. c.). Например, чтобы получить значение ячейки, вы можете сделать e.range.getValue()
. Чтобы получить более подробную информацию, перейдите по ссылке, которую я предоставляю в качестве ссылки.
Во-вторых, когда вы правильно извлекли данные, которые хотите отправить, вы можете использовать UrlFetchApp.fetch(url, params)
, чтобы сделать запрос на ваш URL. В приведенной ниже ссылке вы можете увидеть параметры, которые вы можете указать здесь (например, HTTP-метод, полезная нагрузка и т. Д. c.).
Имейте в виду, что вам может потребоваться предоставить некоторые полномочия для доступа к конечной точке API, если это не опубликовано c. Проверьте ссылку OAuth, которую я прилагаю ниже.
(Вы должны соответствующим образом отредактировать эту функцию, чтобы получать и отправлять именно то, что вы хотите. Примером является то, что я написал).
Подводя итог:
Чтобы создать триггеры, вы должны запустить createTriggers
один раз (если вы запустите его несколько раз, он начнет создавать дубликаты). Запустите, например, эту функцию, которая сначала получает файл ids
через Drive API, а затем создает соответствующие триггеры:
function main() {
var ids = getFileIds();
createTriggers(ids);
}
Также было бы полезно иметь функцию, которая удалит все триггеры , Запустите это, если вы хотите начать с fre sh и убедитесь, что у вас нет дубликатов:
function deleteTriggers() {
var triggers = ScriptApp.getProjectTriggers();
triggers.forEach(function(trigger) {
ScriptApp.deleteTrigger(trigger);
})
}
Ссылка:
Надеюсь, это поможет вам.