Я пытаюсь сделать так, чтобы изменения, сделанные на листе, автоматически отправлялись в Slack, чтобы предупредить людей. Этот аспект отлично работает. Однако вместо того, чтобы срабатывать только тогда, когда у меня есть изменение в предопределенном диапазоне, он срабатывает при всех изменениях независимо от вкладки.
вот код, который я использую в скрипте приложения:
function buildReport() {
const ss = SpreadsheetApp.getActive();
let data = ss.getSheetByName('Mirror').getRange("A1:B13").getValues();
let payload = buildAlert(data);
sendAlert(payload);
}
function buildAlert(data) {
let totalRevenue = data[0][1];
let revenueBreakdown = data.slice(1).map(function(row) {
return row[0] + ": " + row[1];
}).join("\n");
let payload = {
"blocks": [
{
"type": "divider"
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": " *2021 IFL FOOTBALL DRAFT* "
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Round " + totalRevenue
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Drafted Players:"
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": revenueBreakdown
}
}
]
};
return payload;
}
function sendAlert(payload) {
const webhook = "https://hooks.slack.com/services/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"; //Paste your webhook URL here
var options = {
"method": "post",
"contentType": "application/json",
"muteHttpExceptions": true,
"payload": JSON.stringify(payload)
};
try {
UrlFetchApp.fetch(webhook, options);
} catch(e) {
Logger.log(e);
}
}
Мы будем очень признательны за любую помощь! Опять же, мне нужно, чтобы триггер срабатывал только тогда, когда были внесены изменения в определенный диапазон, а не на весь лист.
Спасибо за ответ! Я определенно новичок в кодировании и мог заимствовать код здесь и там. Когда я добавляю функцию onEdit, я получаю TypeError: Не удается прочитать «диапазон» свойств неопределенного onEdit Любая идея, почему?
@ScottShimer, обычно вы не можете запустить функцию
onEdit()
из редактора сценариев. Это одна из специальных функций GAS. Он срабатывает автоматически каждый раз, когда вы редактируете свой лист (вручную).@YuriKhristich прав. Эта ошибка возникает только при первом выполнении ее ВРУЧНУЮ. Однако, как только вы запустите его и включите все разрешения, он будет выполняться каждый раз, когда редактируется ячейка.
Каждый раз, когда я запускаю его, я получаю сообщение об ошибке ... TypeError: Не удается прочитать «диапазон» свойства undefined onEdit @ draft.gs: 5 Было бы проще, если бы оно было специфичным для листа, а не для диапазона? у меня есть 15 других листов в электронной таблице, которые я не хочу запускать при редактировании, но любое редактирование в «Зеркале» будет в порядке. Еще раз за помощь!
Конечно, вы могли бы включить имя листа. Просто встройте это условие в оператор if.
if (range.getLastColumn() <= maxCol && range.getLastRow() <= maxRow && range.getSheet().getName()=="Mirror")
Эта ошибка, которую вы получаете, по-прежнему связана с тем, что вы ВРУЧНУЮ запускаете процедуру. Он будет работать, если он запускается автоматически (т. е. измените ячейку в электронной таблице, а не из редактора).