2017-01-24 2 views
0

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

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

This моя таблица:

И это мой текущий сценарий:

function sendNotification() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Requests"); 
    var cell = ss.getActiveCell().getA1Notation(); 
    var row = sheet.getActiveRange().getRow(); 
    var cellvalue = ss.getActiveCell().getValue().toString(); 

    if (cell.indexOf('F')!=-1) 
    { 
    MailApp.sendEmail({ 
     to: "[email protected]", 
     subject: "Request", 
     htmlBody: "There has been a new request. <br \> <br \> To review it, use the link below. <br \> <br \> " + 
      "<a href=\"https://docs.google.com/spreadsheets/d/1Eq8Kpn0oOBItaGaKaOOLa1qLZZ2_l2gg6wOkLa6GMWo/edit#gid=872382993\">Requests</a>" 
    }); 
    } 
} 

Я хотел бы количества (колонка F) и дата (колонка E) быть включена в электронной почте, и количество (F), дата (E) и депо (D) входит в основной корпус, wi й ссылке на электронную таблицу.

EDIT: Столбцы G, H & Я буду заполнен позднее, получателем письма.

Заранее спасибо

EDIT:

Мой сценарий сейчас выглядит так:

function getActiveRowValues(sheet){ 
    var cellRow = sheet.getActiveRange().getRow(); 
    // get depot value 
    var depotCell = sheet.getRange("D" + cellRow); 
    var depot = depotCell.getDisplayValue(); 
    // get date value 
    var dateCell = sheet.getRange("E" + cellRow); 
    var date = dateCell.getDisplayValue(); 
    // get quantity value 
    var quantCell = sheet.getRange("F" + cellRow); 
    var quant = quantCell.getDisplayValue(); 
    // return an object with your values 
    return { 
    depot: depot, 
    date: date, 
    quantity: quant 
    } 

if (cell.indexOf('F')!=-1) 
{ 
    var rowVals = getActiveRowValues(sheet); 
    MailApp.sendEmail({ 
    to: "[email protected]", 
    subject: "Request" + " date " + rowVals.date + " quant " + rowVals.quant, 
    htmlBody: "There has been a new request. <br \> <br \> To review it, use the link below. <br \> <br \> " + "<table border = \"1\" cellpadding=\"10\" cellspacing=\"0\"><tr><th>Depot</th><th>Date</th><th>Quantity</th></tr><tr><td>"+rowVals.depot+"</td><td>"+rowVals.date+"</td><td>"+rowVals.quant+"</td></tr></table>" + 
     "<a href=\"https://docs.google.com/spreadsheets/d/1Eq8Kpn0oOBItaGaKaOOLa1qLZZ2_l2gg6wOkLa6GMWo/edit#gid=872382993\">Requests</a>" 
    }); 
}} 

Но получаю ошибку:

TypeError: Cannot call method "getActiveRange" of undefined. (line 2, file "Code")

+0

Прошу прощения, в чем вопрос? –

+0

Я хотел бы указать дату и количество, которое будет включено в тему электронной почты, а в теле письма - дату, количество и депо, а также ссылку на электронную таблицу. –

ответ

0

Добавьте эту функцию в сценарии, который будет извлекать ваши необходимые детали из соответствующей колонки:

/** 
* get values of depot, date and quantity from their respective cells. 
* @returns {Object.<string, string>} 
*/ 
function getActiveRowValues(sheet){ 
    var cellRow = sheet.getActiveRange().getRow(); 
    // get depot value 
    var depotCell = sheet.getRange("D" + cellRow); 
    var depot = depotCell.getDisplayValue(); 
    // get date value 
    var dateCell = sheet.getRange("E" + cellRow); 
    var date = dateCell.getDisplayValue(); 
    // get quantity value 
    var quantCell = sheet.getRange("F" + cellRow); 
    var quant = quantCell.getDisplayValue(); 
    // return an object with your values 
    return { 
    depot: depot, 
    date: date, 
    quantity: quant 
    } 
} 

Тогда звоните getActiveRowValues внутри вашего состояния если, а также обновить свои предметные и htmlBody переменные:

if (cell.indexOf('F')!=-1) 
{ 
    var rowVals = getActiveRowValues(sheet); 
    MailApp.sendEmail({ 
    to: "[email protected]", 
    subject: "Request" + " date " + rowVals.date + " quant " + rowVals.quantity, 
    htmlBody: "There has been a new request. <br \> <br \> To review it, use the link below. <br \> <br \> " + "<table border = \"1\" cellpadding=\"10\" cellspacing=\"0\"><tr><th>Depot</th><th>Date</th><th>Quantity</th></tr><tr><td>"+rowVals.depot+"</td><td>"+rowVals.date+"</td><td>"+rowVals.quantity+"</td></tr></table>" + 
     "<a href=\"https://docs.google.com/spreadsheets/d/1Eq8Kpn0oOBItaGaKaOOLa1qLZZ2_l2gg6wOkLa6GMWo/edit#gid=872382993\">Requests</a>" 
    }); 
} 

И ваш общий сценарий должен выглядеть следующим образом:

function sendNotification(event) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    //var sheet = ss.getSheetByName("Requests"); 
    var sheet = ss.getActiveSheet(); 
    var row = sheet.getActiveRange().getRow(); 
    var cellvalue = ss.getActiveCell().getValue().toString(); 
    var emailAdd = "[email protected]"; 
    if(event.range.getA1Notation().indexOf("F") > -1 && sheet.getRange("F" + row).getDisplayValue() && emailAdd.length > 1) 
    { 
    var rowVals = getActiveRowValues(sheet); 
    MailApp.sendEmail({ 
     to: emailAdd, 
     subject: "Request" + " date " + rowVals.date + " quant " + rowVals.quantity, 
     htmlBody: "There has been a new request. <br \> <br \> To review it, use the link below. <br \> <br \> " + "<table border = \"1\" cellpadding=\"10\" cellspacing=\"0\"><tr><th>Depot</th><th>Date</th><th>Quantity</th></tr><tr><td>"+rowVals.depot+"</td><td>"+rowVals.date+"</td><td>"+rowVals.quantity+"</td></tr></table>" + 
     "<a href=\"https://docs.google.com/spreadsheets/d/1Eq8Kpn0oOBItaGaKaOOLa1qLZZ2_l2gg6wOkLa6GMWo/edit#gid=872382993\">Requests</a>" 
     }); 
    } 
} 

/** 
* get values of depot, date and quantity from their respective cells. 
* @returns {Object.<string, string>} 
*/ 
function getActiveRowValues(sheet){ 
    var cellRow = sheet.getActiveRange().getRow(); 
    // get depot value 
    var depotCell = sheet.getRange("D" + cellRow); 
    var depot = depotCell.getDisplayValue(); 
    // get date value 
    var dateCell = sheet.getRange("E" + cellRow); 
    var date = dateCell.getDisplayValue(); 
    // get quantity value 
    var quantCell = sheet.getRange("F" + cellRow); 
    var quant = quantCell.getDisplayValue(); 
    // return an object with your values 
    return { 
    depot: depot, 
    date: date, 
    quantity: quant 
    } 
} 
+0

Я не могу получить это, чтобы отправить мне электронное письмо, хотя для меня это похоже на то, что мне нужно. Как полный новичок, я не уверен, что правильно его ввел - так как я не уверен, что вы подразумеваете под «внутри вашего состояния». –

+0

Из кода выше, что у вас есть wirtten; это ваше условие для отправки электронной почты: if (cell.indexOf ('F')! = - 1) {// отправить электронную почту}. это будет срабатывать, когда cell.indexOf ('F')! = -1 будет true, так как ваша активная ячейка должна быть в столбце F, тогда это условие будет срабатывать.Для меня это условие не имеет смысла, но я не знаю всего сценария. Хотя, если ваш вышеприведенный код работает нормально, я думаю, что это тоже должно сработать, заменив блок кода внутри if (cell.indexOf ('F')! = - 1) {} тем, который я написал выше – MShoaib91

+0

. Ячейка .indexOf ('F')! = - 1 Я получил из этого сообщения http://stackoverflow.com/questions/24374737/google-sheets-script-that-sends-a-notification-upon-form-submission-if- data-is-r Я просто изменил сценарий для работы для меня, и это в значительной степени тот, который я включил в свой оригинальный пост. –

0

Вы можете просто сцепить значения на HTML тела и субъекта

function sendNotification() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName("Requests"); 
var cell = ss.getActiveCell().getA1Notation(); 
var row = sheet.getActiveRange().getRow(); 
var cellvalue = ss.getActiveCell().getValue().toString(); 

var thisIsAVariable = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Requests").getRange("A1").getValue(); 

if (cell.indexOf('F')!=-1) 
{ 
MailApp.sendEmail({ 
to: "[email protected]", 
subject: "Request" + + thisIsAVariable +, 
htmlBody: "concatenate like: "+ thisIsAVariable +"There has been a new request. <br \> <br \> To review it, use the link below. <br \> <br \> " + thisIsAVariable + 
      "<a href=\"https://docs.google.com/spreadsheets/d/1Eq8Kpn0oOBItaGaKaOOLa1qLZZ2_l2gg6wOkLa6GMWo/edit#gid=872382993\">Requests</a>" 
}); 
}} 
+0

Это не похоже на то, что у меня уже есть. –

Смежные вопросы