来自 google 个工作表的电子邮件(收件人、主题、正文)由嵌套选项卡中的单元格设置
email from google sheets with (recipient, subject, body) set by cells in a nested tab
我正在尝试让 sheet 在按下保存按钮时发送电子邮件。只有在验证了正确的标准时,它才应该发送它。保存按钮还将表单内容复制到记录页面,然后清除表单,但电子邮件功能应该先发生。目前一切正常,但电子邮件
对于代码的电子邮件部分,我的脚本如下所示:
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(表格!B3,“对于“,表格!D3)
和
=CONCATENATE(Form!D5, " was repremended for ",Form!D3,": ",Form!B7," by ",Form!F4)
我需要使用行[#]还是我可以使用[#][#]?
我还需要澄清一下 send ==='Send"?
如能帮助完成这项工作,我们将不胜感激。
我认为 可能有一些我遗漏的东西,但我不是一个足够的程序员来弄清楚我遗漏了什么?
编辑以显示完整代码:
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();
}
我试过你的代码,我稍微修改了一下,但本质上这都是你自己的代码。
您的问题出在 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 团队,是一个很好的简单解决方案!
祝你好运,希望一切顺利,还有什么问题尽管问!
编辑:
我用新的眼光重新审视了您的脚本,并使用与您相同的方法再次对其进行了测试,有几处需要修改,它们是:
- sheet.getRange('X44:Z53'); 这只选择了 3 列,你需要 4 这可能缺少发送列,只需检查是否它确实包括所有列,否则它可能不会发送或会出错
- var send = [0][0]; 你确实需要使用我用过的类似方法,即 var row = data[i] ;var send = row[0]; 因为如果你不这样做,你实际上并没有查询数组,我检查了一下,它只是显示空白数据(这可能是为什么它不是的主要原因发送)。重要的一点不是 var row,而是 data[i]。
- 我也在 =CONCATENATE(X44,W44) 上试过了,效果很好。
你真的很熟悉它,就像我说的尝试使用调试功能或 Logger.log() 来记录值,它真的很有用!
祝你好运! :)
我正在尝试让 sheet 在按下保存按钮时发送电子邮件。只有在验证了正确的标准时,它才应该发送它。保存按钮还将表单内容复制到记录页面,然后清除表单,但电子邮件功能应该先发生。目前一切正常,但电子邮件
对于代码的电子邮件部分,我的脚本如下所示:
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(表格!B3,“对于“,表格!D3) 和 =CONCATENATE(Form!D5, " was repremended for ",Form!D3,": ",Form!B7," by ",Form!F4)
我需要使用行[#]还是我可以使用[#][#]?
我还需要澄清一下 send ==='Send"?
如能帮助完成这项工作,我们将不胜感激。
我认为
编辑以显示完整代码:
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();
}
我试过你的代码,我稍微修改了一下,但本质上这都是你自己的代码。
您的问题出在 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 团队,是一个很好的简单解决方案!
祝你好运,希望一切顺利,还有什么问题尽管问!
编辑: 我用新的眼光重新审视了您的脚本,并使用与您相同的方法再次对其进行了测试,有几处需要修改,它们是:
- sheet.getRange('X44:Z53'); 这只选择了 3 列,你需要 4 这可能缺少发送列,只需检查是否它确实包括所有列,否则它可能不会发送或会出错
- var send = [0][0]; 你确实需要使用我用过的类似方法,即 var row = data[i] ;var send = row[0]; 因为如果你不这样做,你实际上并没有查询数组,我检查了一下,它只是显示空白数据(这可能是为什么它不是的主要原因发送)。重要的一点不是 var row,而是 data[i]。
- 我也在 =CONCATENATE(X44,W44) 上试过了,效果很好。
你真的很熟悉它,就像我说的尝试使用调试功能或 Logger.log() 来记录值,它真的很有用!
祝你好运! :)