我有一个表单,我正在预约多天举行的一系列演讲活动。我正试图通过电子邮件向我发送电子邮件,此时此范围内的其中一天达到了房间容量。我正在测量单元格中的容量,该单元格为FALSE,直到达到容量然后变为TRUE。
我的容量测试变量是
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("counts");
var currentValue = sheet.getRange("D2:D13").getValues();
Logger.log('currentValue = '+currentValue)
返回日志,currentValue = false,false,false,false,false,false,false,false,false,false,false,false
我的脚本中有一行可能会触发一封说明的电子邮件。
if (currentValue = "true")
我在这一行尝试了各种组合。目前,每当有人提交预订时,它都会发送电子邮件。 :)
我的“if”语法应该是什么,只有当currentValue范围内某处有“true”时才会发送电子邮件?
感谢您的帮助,您可以借给我。戴夫
答案 0 :(得分:1)
要检查是否相等,您必须使用==
运算符。使用单个等号表示您尝试将“true”值赋给变量currentValue
。要检查它们是否相等,请使用==
。
其次,您需要遍历currentValue
的每个值以检查其中是否有任何值为真。所以要做到这一点:
//currentValue is a 2D array
var nRows = currentValue.length;
for(var i=0;i<nRows;i++) {
if (currentValue[i][0]=="true") {
//send email
}
}
答案 1 :(得分:1)
当你调用getValues()时,它返回一个2D Object [] []数组,所以当你记录currentValue时,你应该得到这样的结果:
[[true], [true], [true], [true], [true], [true], [true], [false], [true], [false]]
Spreadsheet具有存储布尔值的能力,这就是为什么无论何时输入true,它都会将该值转换为大写并将该值解释为boolen。因此,当您在脚本中检索该值时,应将其视为布尔值。
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var currentValues = sheet.getRange("D2:D13").getValues();
for (var x in currentValues) {
var value = currentValues[x][0];
if (value) {
Logger.log('True value');
// Send email, but do you want to send an email every single time this script
// is run??
} else if (value == false) { // You can leave this as else instead of else if
Logger.log('false value')
}
}
我假设您希望在用户提交表单时触发此脚本。每次脚本看到“真实”值时,您都可以将CellRange存储在scriptDB中,只有在数据库中不存在CellRange时才发送电子邮件,而不是发送电子邮件。
答案 2 :(得分:0)
我正在为我收到的答案添加其他评论,并希望更详细地评论代码,以便像我这样的新手可以从答案中学到更多。我使用了Phil提供给我的代码,但我最初将它部署在错误的位置。
function onFormSubmit(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("counts");
var currentValue = sheet.getRange("D2:D13").getValues();
//currentValue is a 2D array (think of it like a matrix). You can get an
//individual element from it by calling currentValue[row#][col#]
// for example: currentValue[3][0] will give you the item in the 4th row, 1st column
// NOTE: arrays are zero-based, so the first item is index 0.
//you can also obtain a row of elements
// var rowThree = currentValue[2];
// rowThree is now a 1D array. get an element by calling rowThree[col#]
var nRows = currentValue.length;
//currentValue.length gives you the number of elements in the first dimension
//of the 2D array. so in this case, it gives you the number of rows.
for(var i=0;i<nRows;i++) {
//creates a new variable i, defines i is initially 0.
//for every loop while i is less than nRows, run the loop, then increment i by 1
//so this will run the following code once for every row number.
Logger.log('row '+i+' col[0] = '+currentValue[i][0]); //log the value in the current row
if (currentValue[i][0]=="true") //the double equals operator checks for equality
//whereas a single equals would ASSIGN the value
//"true" to the array at location [i][0]
{
MailApp.sendEmail("dave@davelalande.com","Talks Room Capacity Reached","A date within the next round of Talks has reached capacity, " +
"\nplease check the sheet https://docs.google.com/spreadsheet/ccc?key=""#gid=1 and removed the date.");
}
}
}
有关Phil提供的工作解决方案的更多信息。
我目前正在接受并且错误说...
TypeError:无法从undefined中读取属性“0”。 (第38行)
指的是这一行。
if (currentValue[i][0]=="true");
我目前唯一记录的是 Logger.log('row'+ i +'col [0] ='+ currentValue [i] [0]);
正在输出这个......
row 0 col[0] = false
row 1 col[0] = false
row 2 col[0] = false
row 3 col[0] = false
row 4 col[0] = false
row 5 col[0] = false
row 6 col[0] = false
row 7 col[0] = false
row 8 col[0] = false
row 9 col[0] = false
row 10 col[0] = false
row 11 col[0] = false