Для настройки уведомлений при изменении значений в определенном диапазоне ячеек в Google Таблицах можно использовать скрипты Google Apps Script, которые позволяют автоматизировать различные задачи. Ниже представлена пошаговая инструкция, как создать скрипт для отправки уведомлений в Telegram:
**Шаг 1: Получение токена бота и ID чата в Telegram**
1. Создайте нового бота в Telegram через @BotFather и получите токен для бота.
2. Найдите свой ID чата. Это можно сделать, написав что-нибудь боту `userinfobot` в Telegram, который скажет ваш ID чата.
**Шаг 2: Создание скрипта в Google Таблицах**
1. Откройте Google Таблицы.
2. Нажмите на `Инструменты` -> `Редактор скриптов`.
3. Удалите код, который уже есть в редакторе, и вставьте следующий скрипт (замените `your-telegram-bot-token` на токен вашего бота и `your-telegram-chat-id` на ваш ID чата):
```javascript
var TELEGRAM_TOKEN = 'your-telegram-bot-token';
var CHAT_ID = 'your-telegram-chat-id';
var SHEET_NAME = 'Лист1'; // Название листа
var RANGE_TO_WATCH = 'Сумма'; // Название столбца для отслеживания
function doPost(e) {
// Эта функция не требуется для данной задачи, но её наличие обязательно для реализации веб-приложения.
}
function setTrigger() {
// Эта функция устанавливает триггер на изменение таблицы
var ss = SpreadsheetApp.getActiveSpreadsheet();
ScriptApp.newTrigger('sendTelegramNotification')
.forSpreadsheet(ss)
.onChange()
.create();
}
function sendTelegramNotification() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
var range = sheet.getDataRange();
var values = range.getDisplayValues(); // Получаем значения последних ячеек в столбце "Сумма".
var columnToWatch = getColumnNumberByName(RANGE_TO_WATCH, values[0]);
if (columnToWatch === -1) {
return;
}
// Проходим по каждой строке и проверяем, является ли содержимое числом, полученным формулой
for (var i = 1; i < values.length; i++) {
var cellValue = values[i][columnToWatch];
var cellFormula = range.getCell(i + 1, columnToWatch + 1).getFormula();
// Если значение является результатом формулы, присылаем уведомление
if (cellFormula && !isNaN(cellValue)) {
var prevValue = range.getCell(i + 1, columnToWatch + 1).getNote();
if (prevValue !== cellValue) {
// Сохраняем текущее значение в примечание, чтобы не отправлять повторные уведомления
range.getCell(i + 1, columnToWatch + 1).setNote(cellValue);
var message = 'Значение в столбце "' + RANGE_TO_WATCH + '" изменено: ' + cellValue;
sendTelegramMessage(message);
}
}
}
}
function sendTelegramMessage(text) {
var url = 'https://api.telegram.org/bot' + TELEGRAM_TOKEN + '/sendMessage';
var payload = {
chat_id: CHAT_ID,
text: text,
parse_mode: 'Markdown'
};
var options = {
'method': 'post',
'contentType': 'application/json',
'muteHttpExceptions': true,
'payload': JSON.stringify(payload)
};
UrlFetchApp.fetch(url, options);
}
function getColumnNumberByName(columnName, headers) {
for (var i = 0; i < headers.length; i++) {
if (headers[i]