目前,我有两个功能执行相同的功能,一次是对我来说(假设是H),一次是对我妻子来说(W)。
该函数的作用如下:选择正确的电子表格,然后在电子表格中获取一些值以定义1 /一个问题; 2 /条消息和3 /一个主题。稍后,我将用这些电子邮件。
这是H的代码(变量行和循环大小已在前面定义):
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,这有点令人失望。
另外,谁能解释为什么变量行,开始年份和循环大小必须在函数getQA中而不是在mainQA中定义?我会认为,如果在mainQA中定义了它们,则可以在getQA中使用它们,因为从mainQA调用了getQA。那是错的吗?
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 = '[email protected]';
var email_h = '[email protected]';
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;
}