Javascript 基于一个单元格中的数字,我想使用Google脚本编辑器发送一封包含相邻单元格名称的电子邮件
我想在B列中的单元格达到5时发送电子邮件。但是,我希望邮件的一部分包含A列中的个人姓名。以下是我目前的代码:Javascript 基于一个单元格中的数字,我想使用Google脚本编辑器发送一封包含相邻单元格名称的电子邮件,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我想在B列中的单元格达到5时发送电子邮件。但是,我希望邮件的一部分包含A列中的个人姓名。以下是我目前的代码: function ifstatement() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Total"); var value = sheet.getRange("B3:B241").getValue(); if(value === 5) { MailApp.sen
function ifstatement() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Total");
var value = sheet.getRange("B3:B241").getValue();
if(value === 5) {
MailApp.sendEmail("jdoe@gmail.com", "Update", "Hi," name "are you alright?");
}
}
我正在尝试定义变量“name”,以便它添加A列中的人名。请任何人帮助我 从工作表中的不同范围获取值的理想方法是将工作表中的所有数据作为单个2D数组(本质上是一个表)提取,然后通过该数组确定要执行的操作。这避免了不必要的复杂性,还确保了执行时间保持较低,因为您不需要多次调用
sheet.getRange()
服务
关于字符串连接:字符串连接无法工作。在字符串之间需要+
。从“你好,”name“你还好吗?”
转到“你好,+name+”你还好吗?”
以下是一个示例解决方案:
//Condensed version
function checkSheet2() {
var values = SpreadsheetApp.getActive().getSheetByName('Total').getDataRange().getValues();
var columns = getColumnHeaders(values);
for(var i = 0; i < values.length; i++){
if(Number(values[i][columns['Number']]) === 5){
//MailApp.sendEmail(values[i][columns['Email']], "Update", "Hi, "+ values[i][columns['Name']] +" are you alright?");
}
}
}
使用此示例数据:
注意:您不需要知道列
位是如何工作的,只需要知道如何使用它,如果您决定添加或重新排列电子表格的列,可以将其视为一项小型服务,以简化工作
/*
* Run this to check the sheets values
* This is more verbose to aid with understanding
*/
function checkSheet() {
var sheet = SpreadsheetApp.getActive().getSheetByName('Total');
var range = sheet.getDataRange();
var values = range.getValues();
var columns = getColumnHeaders(values);
//Loop through all the rows in the sheet and check if the 'Number' column is 5
for(var i = 0; i < values.length; i++){
var number = values[i][columns['Number']]; //Get the number from the table of values, utalizing the columns object to get the index
if(number === 5){
var name = values[i][columns['Name']];
var email = values[i][columns['Email']];
Logger.log(name);
Logger.log(email);
//MailApp.sendEmail(email, "Update", "Hi, "+ name +" are you alright?");
}
}
}
/*
* Generates a columns object that lets you reference columns by name instead of index
* Can be used like column['headerText'] to get the index of a column
* Is just a dynamic convenience to avoid referencing columns by index
*/
function getColumnHeaders(array){
var columns = {};
for(var i = 0; i < array[0].length; i++){
columns[array[0][i]] = i;
}
return columns;
}
在这一行:
var value = sheet.getRange("B3:B241").getValue();
使用该方法时,它只返回范围左上角单元格的值,需要获取整个列A和B的值,因此首先将范围设置为A3:B241
,然后使用该方法获取二维数组中的值。这条线应该是这样的:
var values = sheet.getRange("A3:B241").getValues();
for (var i = 0; i < values.length; i++) {
if(values[i][1] === 5){
// Block of code to be executed if the condition is true
}
}
MailApp.sendEmail("jdoe@gmail.com", "Update", "Hi," + values[i][0] + " are you alright?");
一旦获得了,您需要循环遍历这些值,并检查索引1values[i][1]
处的元素是否等于5。这条线应该是这样的:
var values = sheet.getRange("A3:B241").getValues();
for (var i = 0; i < values.length; i++) {
if(values[i][1] === 5){
// Block of code to be executed if the condition is true
}
}
MailApp.sendEmail("jdoe@gmail.com", "Update", "Hi," + values[i][0] + " are you alright?");
完整代码:
function ifstatement() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Total");
var values = sheet.getRange("A3:B241").getValues();
for (var i = 0; i < values.length; i++) {
if(values[i][1] === 5){
MailApp.sendEmail("jdoe@gmail.com", "Update", "Hi," + values[i][0] + " are you alright?");
}
}
函数ifstatement(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheetByName(“总计”);
var values=sheet.getRange(“A3:B241”).getValues();
对于(变量i=0;i
显然不是Excel问题-请不要使用该标记询问有关Google工作表的问题…您有示例工作表或数据集吗?乍一看,我很确定您需要在名称和后续字符串常量之间使用字符串连接运算符,==
做了什么?@Jeeped他有,他的字符串没有连接没错,但这不是他问题的要点。