目前,我有两个功能可以执行相同的操作,一次是针对我(让我们说H),一次针对我的妻子(W)。
该功能的作用如下:选择正确的电子表格,然后在电子表格中获取一些值以定义1 / a问题; 2 /一条消息和3 / a主题。稍后我会发一封电子邮件。
以下是H的代码(变量row和loopsize之前已经定义过):
ss.setActiveSheet(ss.getSheetByName("question_H"));
var sheet_H = SpreadsheetApp.getActiveSheet();
var question_H = sheet_H.getRange(row,6).getDisplayValue();
var message_H = "";
for (var i=1; i<=loopsize; i++) {
var year = Number(startyear)+i;
var answer = sheet_H.getRange(row,7+i).getDisplayValue();
message_H=message_H
+ year + ':' + '\n'
+ answer + '\n\n';
}
var subject_H = question_H;
我想知道我是否可以创建一个循环,这样我就不必用H和W两次编写相同的代码。经过一些研究后我想出了以下内容(这不是相同的代码,但只是说明了我发现的解决方案:
var names = ["H","S"];
var message_H = "";
var subject_H = "";
var message_W = "";
var subject_W = "";
for each (var name in names){
eval("message_"+[name] + " = " + "'"+ name + "'") ;
eval("subject_"+[name] + " = " + "'"+ name + "'") ;
}
但是我觉得使用eval非常麻烦。有没有更简单的方法呢?
感谢您的帮助。
=============================== EDIT =============== =======================
以下是我根据库珀的建议提出的建议。它现在正在工作,虽然我必须使用eval一次,这有点令人失望。
此外,任何人都可以解释为什么必须在函数getQA而不是mainQA中定义变量row,startyear和loopsize?我想如果它们在mainQA中定义,那么它们可以在getQA中使用,因为getQA是从mainQA调用的。那是错的吗?
function mainQA() {
getQA("h");
getQA("w");
}
function getQA(type){
var p=type;
var ss=SpreadsheetApp.getActive();
var help_sheet=ss.getSheetByName("help");
var row = help_sheet.getRange(3,2).getDisplayValue();
var startyear = help_sheet.getRange(4,2).getDisplayValue();
var loopsize = help_sheet.getRange(5,2).getDisplayValue();
var email_w = 'wife@gmail.com';
var email_h = 'husband@gmail.com';
var email = eval("email_"+p);
var sh=ss.getSheetByName('question_' + p);
var question = sh.getRange(row,6).getDisplayValue();
var message = "";
for (var i=1; i<=loopsize; i++) {
var year = Number(startyear)+i;
var answer = sh.getRange(row,7+i).getDisplayValue();
message=message
+ year + ':' + '\n'
+ answer + '\n\n';
}
var subject = 'Q&A: ' + question;
message = message
+ 'What is your answer for today? \n'
+'link to a google form';
MailApp.sendEmail(email,subject, message);
}
答案 0 :(得分:1)
//您可以使用参数创建函数。如果您不提供'W',则默认为'H';
function getQMS(type){
var p=type||'H';
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('sheet_' + p);
var row={'H':1,'W':2}; //whatever you want
var col={'H':1,'W':2}; //again whatever you want
var q=sh.getRange(row[p],col[p]).getValue();
var m='';//not defined
var s='';//not defined
var QMS={Question:q,Message:m,Subject:s};
return QMS;
}
答案 1 :(得分:1)
我一直在努力寻找要在Google表格脚本中使用的答案,并且找到了一个简单的解决方案:
function SetVar() {
var VarName = [];
for (var x = 0; x < 5; x++) {
VarName[x] = x; //or any other value
}
Browser.msgBox(VarName[1])
Browser.msgBox(VarName[2])
Browser.msgBox(VarName[3])
Browser.msgBox(VarName[4])
Browser.msgBox(VarName[5])
}
注释
您将能够命名变量(带有数字)并将其用于许多用途。
对于我来说,我已经设置了一个常规变量,并使用split命令来获取要使用的VarName[x]
的确切位置(数字)。