В продолжении темы форум Решил попробовать получать сообщения не по почте а в телеграме, скрипт видоизменил получилось: [vba]
Код
function onEdit(e) { //данные телеграм: var token = '99999999999999999'; var idChat = '-99999999' // Получаем диапазон ячеек, в которых произошли изменения var range = e.range; // Лист, на котором производились изменения var sheet = range.getSheet(); // Проверяем, нужный ли это нам лист if (sheet.getName() != 'Лист1') { return false; } // Проверяем стартовую позицию диапазона, нам нужно фиксировать изменения в столбце В, т.е. 2 колонка Logger.log(range.getColumn()); if (range.getColumn() != 2) { return false; } for (var i = 1; i <= range.getNumRows(); i++) { var cell = range.getCell( i, // номер строки 1 // номер колонки ); var sheet = e.source.getActiveSheet(); //получаем номер измененной строки var idRow = e.range.getRow(); //получаем текст из 4 колонки, на нужной строке var text = sheet.getRange(idRow, 4).getValue(); //тоже из 1 колонки var date = sheet.getRange(idRow, 1).getValue(); //Формируем текст сообщения var message = encodeURIComponent('Изменения в таблице ' + '\n' + 'Строка №' + idRow + '\n' +date+ '\n'+text); //Формируем ссылку по API Telegram var Url = 'https://api.telegram.org/bot'+token+'/sendMessage?chat_id='+idChat+'&text='+message; MessageBox(Url) }; }; function MessageBox(Url){ UrlFetchApp.fetch(Url).getContentText()};
[/vba]
Но он не работает)) В логах следующая ошибка:
Цитата
Вам не разрешено вызывать пользователя UrlFetchApp.fetch. Необходимые разрешения: https://u.to/7WuHFw at MessageBox(Код:39:15) at onEdit(Код:35:6)
Помогите разобраться.
В продолжении темы форум Решил попробовать получать сообщения не по почте а в телеграме, скрипт видоизменил получилось: [vba]
Код
function onEdit(e) { //данные телеграм: var token = '99999999999999999'; var idChat = '-99999999' // Получаем диапазон ячеек, в которых произошли изменения var range = e.range; // Лист, на котором производились изменения var sheet = range.getSheet(); // Проверяем, нужный ли это нам лист if (sheet.getName() != 'Лист1') { return false; } // Проверяем стартовую позицию диапазона, нам нужно фиксировать изменения в столбце В, т.е. 2 колонка Logger.log(range.getColumn()); if (range.getColumn() != 2) { return false; } for (var i = 1; i <= range.getNumRows(); i++) { var cell = range.getCell( i, // номер строки 1 // номер колонки ); var sheet = e.source.getActiveSheet(); //получаем номер измененной строки var idRow = e.range.getRow(); //получаем текст из 4 колонки, на нужной строке var text = sheet.getRange(idRow, 4).getValue(); //тоже из 1 колонки var date = sheet.getRange(idRow, 1).getValue(); //Формируем текст сообщения var message = encodeURIComponent('Изменения в таблице ' + '\n' + 'Строка №' + idRow + '\n' +date+ '\n'+text); //Формируем ссылку по API Telegram var Url = 'https://api.telegram.org/bot'+token+'/sendMessage?chat_id='+idChat+'&text='+message; MessageBox(Url) }; }; function MessageBox(Url){ UrlFetchApp.fetch(Url).getContentText()};
[/vba]
Но он не работает)) В логах следующая ошибка:
Цитата
Вам не разрешено вызывать пользователя UrlFetchApp.fetch. Необходимые разрешения: https://u.to/7WuHFw at MessageBox(Код:39:15) at onEdit(Код:35:6)
Попробовал без onEdit, просто функцию с триггером на редактирование из ""Триггеров текущего проекта" Все айс работает, пока не начнешь добавлять пользователей. Без onEdit каждому пользователю нужно авторизоваться в скрипте и привязать скрипту триггер - звучит как то не очень. Всех нужно будет учить пользованию консолью))
Попробовал без onEdit, просто функцию с триггером на редактирование из ""Триггеров текущего проекта" Все айс работает, пока не начнешь добавлять пользователей. Без onEdit каждому пользователю нужно авторизоваться в скрипте и привязать скрипту триггер - звучит как то не очень. Всех нужно будет учить пользованию консолью))Kashimirush
Работа, работа, перейди на Федота...
Сообщение отредактировал Kashimirush - Четверг, 20.02.2020, 14:12
пользователю нужно авторизоваться в скрипте и привязать скрипту триггер
Был не прав, в изначальном коде у меня было всплывающее окошко (Отправить сообщение: Да/Нет), и гугл на нем застопорился, когда отрабатывал триггер. Убрал всплывающее окно, дал скрипту триггер на редактирование таблицы - теперь все работает у всех пользователей.
[vba]
Код
function SendTelegram() { var chatID = "-33333333"; // id чата бота в телеграм. var ipTokken = "99999999999999999999999999999999999"; var ss = SpreadsheetApp.getActiveSpreadsheet(); var activeCell = ss.getActiveSheet().getActiveCell(); var sheet = ss.getActiveSheet(); //Берем только нужный лист if (sheet.getName() != 'Лист1') { return false; }; //Находим номер активного столбца var Colnum = activeCell.getColumn(); //Берем только нужную колонку Y = 25 колонка if (Colnum != 25) { return false; } var rowNum = activeCell.getRow(); var orderName = ss.getActiveSheet().getRange(rowNum, 1).getValue(); var orderDate = ss.getActiveSheet().getRange(rowNum, 25).getValue(); var FormatedDate = Utilities.formatDate(orderDate, ss.getSpreadsheetTimeZone(), "dd-MM-yyyy"); //в моем случае в данной колонке даты - форматирую как мне нужно var text = encodeURIComponent( "Готовность проекта "+ orderName + "\n" + "Ячейка № " + rowNum + "\n" +'Указанная дата: '+ FormatedDate ); var Url = "https://api.telegram.org/bot" + ipTokken + "/sendMessage?chat_id=" + chatID + "&text=" + text; messBox(Url) }
function messBox(Url) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var openUrl = UrlFetchApp.fetch(Url).getContentText() }
пользователю нужно авторизоваться в скрипте и привязать скрипту триггер
Был не прав, в изначальном коде у меня было всплывающее окошко (Отправить сообщение: Да/Нет), и гугл на нем застопорился, когда отрабатывал триггер. Убрал всплывающее окно, дал скрипту триггер на редактирование таблицы - теперь все работает у всех пользователей.
[vba]
Код
function SendTelegram() { var chatID = "-33333333"; // id чата бота в телеграм. var ipTokken = "99999999999999999999999999999999999"; var ss = SpreadsheetApp.getActiveSpreadsheet(); var activeCell = ss.getActiveSheet().getActiveCell(); var sheet = ss.getActiveSheet(); //Берем только нужный лист if (sheet.getName() != 'Лист1') { return false; }; //Находим номер активного столбца var Colnum = activeCell.getColumn(); //Берем только нужную колонку Y = 25 колонка if (Colnum != 25) { return false; } var rowNum = activeCell.getRow(); var orderName = ss.getActiveSheet().getRange(rowNum, 1).getValue(); var orderDate = ss.getActiveSheet().getRange(rowNum, 25).getValue(); var FormatedDate = Utilities.formatDate(orderDate, ss.getSpreadsheetTimeZone(), "dd-MM-yyyy"); //в моем случае в данной колонке даты - форматирую как мне нужно var text = encodeURIComponent( "Готовность проекта "+ orderName + "\n" + "Ячейка № " + rowNum + "\n" +'Указанная дата: '+ FormatedDate ); var Url = "https://api.telegram.org/bot" + ipTokken + "/sendMessage?chat_id=" + chatID + "&text=" + text; messBox(Url) }
function messBox(Url) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var openUrl = UrlFetchApp.fetch(Url).getContentText() }