• Как отправить почтовое оповещение при заполнении ячейки Гугл-таблицы?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    Воспользуйтесь триггером onEdit(event). Вот заготовка кода:
    function onEdit(event) {
    	//Возникает при изменении ячейки
    	var ss = event.source.getActiveSheet();//Текущий лист
      	var address = event.range.getA1Notation().toUpperCase();//Адрес ячейки
    	var row = event.range.getRow();							//Номер строки
    	var col = event.range.getColumn();						//Номер столбца
    	var newValue = event.value;								//Новое значение
    	var oldValue = event.oldValue;							//Старое значение
    	
      if (["Лист1","Лист2"].indexOf(ss.getName())==-1) return;	//Указываем на каких листах должен работать скрипт
    	
    	//Что-то делаем...
      };

    Останется прописать отправку письма. Это делается с помощью MailApp
    Скорее всего простой триггер не даст отправить письмо, тогда надо сделать обычный триггер и навесить его на onEdit().
    Ответ написан
    2 комментария
  • Как автоматически создать копию листа Таблицы?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Вам потребуется Google Apps Script для запуска программы из меню Таблицы.

    Создаем меню

    function onOpen() {
      SpreadsheetApp.getUi()
        .createMenu('Reset sheet')
        .addItem('Make a copy before reset', 'userActionMakeCopyBeforeReset')
        .addToUi();
    }


    Действие пользователя

    function userActionMakeCopyBeforeReset() {
      const book = SpreadsheetApp.getActive();
      const sheet = book.getActiveSheet();
      makeCopyBeforeReset_(sheet, book);
    }


    Копирование и сброс листа-шаблона

    function makeCopyBeforeReset_(sheet, book) {
      const copy = sheet.copyTo(book);
      const rangesAddressesList = ['B5', 'B7', 'B9', 'B11'];
      resetByRangesList_(sheet, rangesAddressesList);
      return copy;
    }


    Основной метод сброса данных

    function resetByRangesList_(sheet, rangesAddressesList) {
      sheet.getRangeList(rangesAddressesList).clearContent();
    }


    Собрав это все, вы должны получить программу как на видео https://twitter.com/i/status/1260851838942957574
    Пример в Таблице https://docs.google.com/spreadsheets/d/1g8cCxofljF...
    Ответ написан
    4 комментария