目前,我有两个功能执行相同的功能,一次是对我来说(假设是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;
}

09-04 21:13