Как отправить автоматическое электронное письмо указанному c человеку, в зависимости от состояния задачи, с использованием вспомогательного листа для хранения электронной почты? - PullRequest
1 голос
/ 03 апреля 2020

Заголовок Гори, но я не мог найти способ быть более ясным.

У меня нет опыта в кодировании, и мне было интересно, возможно ли сделать что-то подобное тому, что я собираюсь объяснить.

Это мой пример листа :

Я хочу сделать так, чтобы автоматические электронные письма отправлялись человеку, назначенному для задачи, если статус задачи установлен на срочно, ссылаясь на людей по именам и имея вспомогательный лист со всеми именами и соответствующими электронными письмами.

Я просмотрел и нашел несколько похожих вопросов, которые мне, к сожалению, не удалось адаптировать. Единственное, что я получил, это то, что мне нужно настроить триггер onEdit, что я и сделал, но с этого момента я совершенно не понимаю.

Может ли кто-нибудь указать мне правильное направление? Понятия не имею, с чего начать.

Жду вашего совета. Спасибо и будьте в безопасности в эти безумные времена!

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Это было забавное упражнение. Я пытался сделать скрипт максимально чистым и многократно используемым, чтобы другие могли адаптировать его к своим потребностям.

Использование

  1. Откройте нужную таблицу Чтобы добавить скрипт в.
  2. Откройте редактор скриптов: Tools / Script editor.
  3. Добавьте код. Это может быть настроено путем настройки переменных в верхней части:
var trackerSheetName = 'Tracker 1'
var trackerSheetStatusColumnIndex = 2
var trackerSheetNameColumnIndex = 4
var triggeringStatusValue = 'Urgent'

var peopleSheetName = 'AUX'
var peopleSheetNameColumnIndex = 1
var peopleSheetEmailColumnIndex = 2

var emailSubject = 'We need your attention'
var emailBody = 'It is urgent'

function checkStatusUpdate(e) {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
  var activeSheet = spreadsheet.getActiveSheet()

  // skip if different sheet edited
  if (activeSheet.getName() !== trackerSheetName) {
    return
  }

  var editedRange = e.range

  // skip if not a single cell edit
  if (editedRange.columnStart !== editedRange.columnEnd || editedRange.rowStart !== editedRange.rowEnd) {
    return
  }

  // skip if edited cell is not from Status column
  if (editedRange.columnStart !== trackerSheetStatusColumnIndex) {
    return
  }

  // skip if Status changed to something other than we're looking for
  if (e.value !== triggeringStatusValue) {
    return
  }

  var assigneeName = activeSheet.getRange(editedRange.rowStart, trackerSheetNameColumnIndex, 1, 1).getValue()

  var peopleSheet = spreadsheet.getSheetByName(peopleSheetName)
  var people = peopleSheet.getRange(2, 1, peopleSheet.getMaxRows(), peopleSheet.getMaxColumns()).getValues()

  // filter out empty rows
  people.filter(function (person) {
    return person[peopleSheetNameColumnIndex - 1] && person[peopleSheetEmailColumnIndex - 1]
  }).forEach(function (person) {
    if (person[peopleSheetNameColumnIndex - 1] === assigneeName) {
      var email = person[peopleSheetEmailColumnIndex - 1]

      MailApp.sendEmail(email, emailSubject, emailBody)
    }
  })
}
Сохраните код в редакторе. Откройте страницу устанавливаемых триггеров: Edit / Current project's triggers. Создайте новый триггер. Установите Event Type на On edit. Оставьте другие параметры по умолчанию. Сохраните триггер и подтвердите предоставление сценарию разрешений для доступа к электронным таблицам и отправки электронной почты от вашего имени. Go обратно в электронную таблицу и попробуйте изменить статус в Tracker 1 вкладка для любой из строк. Корреспондент должен получить электронное письмо в ближайшее время.
0 голосов
/ 03 апреля 2020

Это должно помочь вам начать:

Вам необходимо создать устанавливаемый триггер для функции onMyEdit. Диалог поможет вам создать свою электронную почту, предоставив вам формат html для его отображения. Когда вы будете готовы, просто закомментируйте диалог и удалите // перед строкой GmailApp.sendEdmail ().

function onMyEdit(e) {
  //e.source.toast('Entry');
  const sh=e.range.getSheet();
  if(sh.getName()=="Tracker") {
    if(e.range.columnStart==2 && e.value=='Urgent') {
      //e.source.toast('flag1');
      const title=e.range.offset(0,-1).getValue();
      const desc=e.range.offset(0,1).getValue();
      const comm=e.range.offset(0,3).getValue();
      if(title && desc) {
        var html=Utilities.formatString('<br />Task Title:%s<br />Desc:%s<br />Comments:%s',title,desc,comm?comm:"No Additional Comments");
        //GmailApp.sendEmail(e.range.offset(0,2).getValue(), "Urgent Message from Tracker", '',{htmlBody:html});
        SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(html).setWidth(600), 'Tracker Message');
        e.source.toast('Email Sent');
      }else{
        e.source.toast('Missing Inputs');
      }
    }
  }
}

GmailApp.sendEmail ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...