我正在尝试使用工作表在按下保存按钮时发送电子邮件。它应该只在验证正确的标准时发送它。保存按钮还将表单内容复制到记录页面,然后清除表单,但电子邮件功能应首先发生。目前一切正常但电子邮件
以下是我的脚本在代码的电子邮件部分中的样子:
function emailReferals(){
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName('namedSheet');
var dataRange = sheet.getRange('X44:Z53');
// Fetch values for each row in the Range.
var data = dataRange.getValues().toString();
for (i in data) {
var send = [0][0];
var recipients = [0][1];
var subject = [0][2];
var message = [0][3];
if(send === 'Send'){
MailApp.sendEmail(recipients,subject,message);
}
}
}
请注意,这不是startRow numRow,如https://developers.google.com/apps-script/articles/sending_emails电子邮件的许多教程中所示。我的数据位于页面深处,因此我在示例中调用了x44:Z53等范围。
我拉的细胞说: = CONCATENATE(Form!B3,“for”,Form!D3) 和 = CONCATENATE(表格!D5,“表示为”,Form!D3“:”,Form!B7“,”,Form!F4“
我需要使用行[#]还是我可以使用[#] [#]?
我是否需要澄清发送==='发送'?
任何帮助获得这项工作将不胜感激。
我认为Email notifications with body/subject containing cell value可能有一些我缺少的东西,但我还不足以让程序员知道我缺少什么?
编辑以显示完整代码:
function onOpen() {
SpreadsheetApp.getUi().createMenu('My Menu').addItem('Copy Cells', 'copyCells').addToUi();
}
//send emails for Discipline Referrals to proper authorities.
function emailDNRReferals(){
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName('HouseSort');
var dataRange = sheet.getRange('X44:Z53');
// Fetch values for each row in the Range.
var data = dataRange.getValues().toString();
for (i in data) {
//var row = data[i];
var send = [0][0];
var recipients = "rslawy@nmmediaarts.org, rpdsalway@gmail.com";
var subject = [0][2];
var message = [0][3];
if(send == 'Send'){
MailApp.sendEmail(recipients,subject,message);
}
}
}
//Save and clear the form
function SaveDNRRecords() {
var ss = SpreadsheetApp.getActive();
var source = ss.getSheetByName('Form');
var records = ss.getSheetByName(source.getRange('A1').getValues()); //get the tab to send the save data to.
var val = source.getRange('B3:G11').getValues(); //get the cells with information to copy
// get values from zero indext cells and save to records.
// 2,2=StudentD5.2,0=BehaviorD3.1,4=UserF-G4.0,0=CatagoryB3.0,2=BehaviorD3.4,0=NoteB-D7.8,5=TotalG11. Nulls leave space for houses on line 14.
var write = [val[2][2], val[2][0], val[1][4], new Date(), val[0][0], val[0][2], val[4][0], val[8][5],null, null, null, null, null, null,null];
write[Number(val[3][3].match(/(\d+)/)[0]) + 7] = val[8][5];
records.appendRow(write);
var referrals = ss.getSheetByName('DisciplineReferrals'); //Save some data to the DisciplineReferrals tab.
var val2 =source.getRange('D1:J1').getValues(); // gather content that shows only if B3=Disipline Referral
var write = [val2[0][1], val2[0][2], val2[0][3], val2[0][0], val2[0][4], val2[0][5], val2[0][6]]; //Zero indext row from D1 to J1
referrals.appendRow(write); //Write the data to the first available row on the selected (line 8) term tab.
//Clear the cells for the next use.
source.getRange('B3').clearContent();
source.getRange('D3').clearContent();
source.getRange('F4').clearContent();
source.getRange('B5').clearContent();
source.getRange('D5').clearContent();
source.getRange('B7').clearContent();
source.getRange('G10').clearContent();
source.getRange('B7:D7').mergeAcross(); // this merges the cell to self heal potential user error.
source.getRange('B11').clearContent();
}
//Clear the form without saving.
function clearDNRForm() {
var ss = SpreadsheetApp.getActive();
var source = ss.getSheetByName('Form');
source.getRange('B3').clearContent();
source.getRange('D3').clearContent();
source.getRange('F4').clearContent();
source.getRange('B5').clearContent();
source.getRange('D5').clearContent();
source.getRange('B7').clearContent();
source.getRange('G10').clearContent();
source.getRange('B7:D7').mergeAcross();
source.getRange('B11').clearContent();
}
答案 0 :(得分:0)
我尝试了你的代码,我稍微修改了它,但实质上这是你自己的代码。
您的问题出在if语句中。下面的if语句有“==”而不是“===”,它无法确定类型。可能有一个更干净的方法,但它的工作原理。 它发送给我的电子邮件,只是一个小修复:)(两只眼睛和所有!)
function emailReferals(){
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName('sheet1');
var dataRange = sheet.getRange('W44:Z47');
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (i in data) {
var row = data[i];
var send = row[0];
var recipients = row[1];
var subject = row[2];
var message = row[3];
Logger.log(data);
if(send == 'Send'){
MailApp.sendEmail(recipients,subject,message);
}
}
}
我建议你看一下:Tutorial: Sending emails from a Spreadsheet。它直接来自Google Apps团队,是一个很好的简单解决方案!
祝你好运,希望一切顺利,只要问别的!修改强> 我用新眼睛再看一下你的剧本并用你的方法再次测试它,有一些事情需要修改,这里是:
你真的很接近它,就像我说尝试使用调试功能或Logger.log()来记录值,它真的很有用!
祝你好运! :)