如何使用基于2个匹配值的数组的setValue()?

时间:2018-01-15 16:20:36

标签: javascript google-apps-script

我应该首先告诉你,我是JS中的极端新手。我的背景几乎完全在SQL / VBA中。因此,无论是编码还是Stack Overflow礼仪,您都可以提供任何提示。

问题背景 我有一个脚本用于从Google表单回复中发送出站电子邮件,托管在Google表格中并设置为OnFormResponse()。通常,我只要求在HTML模板电子邮件中从表单响应中发回特定信息。但是,我现在的业务案例是我需要从另一个工作表中查找值,其中相邻列的值与表单响应值匹配。使用匹配的值,我需要在Form Response表中设置特定列/行(F:F)的值。

示例: 这是表单响应表的简化版本,以及我通常使用的公式: enter image description here

以下是其他标签,'独特数据库!',如下所示:

enter image description here

所以,我对JavaScript数组的理解是,在Form Responses Sheet上,我会将所有列(本例中的A:E)加载到变量中,并获取值。然后,获取“唯一数据库!”的列A:B,将这些值加载到另一个数组中。如果这是准确的,你如何比较1个数组的索引与另一个数组的索引,并返回一个相邻的匹配?

谢谢!

2 个答案:

答案 0 :(得分:6)

您可以尝试此功能:

function dbmanager(dbname) {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Unique Databases!');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var r='';
  for(var i=0;i<vA.length;i++){
    if(dbname==vA[i][0]){
      r=vA[i][1];
      break;
    }
  }
  return r;  
}

答案 1 :(得分:3)

我不确定您是否需要使用应用脚本进行这样的比较。也许更快的方法是在工作表中使用查询。这样的事情可能是:

 =QUERY(Sheet1!A1:B3,"SELECT B WHERE A ='"&E2&"'",0)

查询的第一部分是查找唯一数据库数据。第二部分选择唯一数据库数据中的列B,其中列A等于表单响应数据中的数据库名称。请注意,此查询位于响应数据的F列中。

使用代码的另一种替代方法可能是like this.,下面的代码正在运行。

function getFormData(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet2');
  var getRange = sheet.getRange('E2:E');
  var data = getRange.getValues();
  var lookup = getLookupData();
  data.forEach(function(item,index){
    sheet.getRange(index + 2 , 6).setValue(lookup[item])
  })

}

function getLookupData() {
  var obj = {};
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1');
  var range = sheet.getRange('A2:B6');
  var data = range.getValues();
  data.forEach(function(item){
    obj[item[0]] = item[1];    
  })
  Logger.log(obj)
  return obj;
}