目前,我有两个执行相同操作的函数,一次为我(假设为 H),一次为我的妻子(W)。
该函数的作用如下:选择正确的电子表格,然后获取电子表格中的一些值来定义 1/一个问题; 2/消息和 3/主题。稍后我会用这些内容制作一封电子邮件。
这里是 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的使用非常麻烦。有没有更简单的方法来做到这一点?
感谢您的帮助。
==================================编辑=============== =======================
这是我根据库珀的建议想到的。现在它可以工作了,尽管我必须使用一次 eval,这有点令人失望。
另外,谁能解释为什么变量 row、startyear 和 Loopsize 必须在函数 getQA 中定义,而不是在 mainQA 中定义?我本以为如果它们在 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);
}
最佳答案
//可以创建带参数的函数。如果您不提供“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;
}
关于javascript - 谷歌脚本中带有字符串的动态变量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48292610/