我应该首先告诉你,我是JS中的极端新手。我的背景几乎完全在SQL / VBA中。因此,无论是编码还是Stack Overflow礼仪,您都可以提供任何提示。
问题背景 我有一个脚本用于从Google表单回复中发送出站电子邮件,托管在Google表格中并设置为OnFormResponse()。通常,我只要求在HTML模板电子邮件中从表单响应中发回特定信息。但是,我现在的业务案例是我需要从另一个工作表中查找值,其中相邻列的值与表单响应值匹配。使用匹配的值,我需要在Form Response表中设置特定列/行(F:F)的值。
以下是其他标签,'独特数据库!',如下所示:
所以,我对JavaScript数组的理解是,在Form Responses Sheet上,我会将所有列(本例中的A:E)加载到变量中,并获取值。然后,获取“唯一数据库!”的列A:B,将这些值加载到另一个数组中。如果这是准确的,你如何比较1个数组的索引与另一个数组的索引,并返回一个相邻的匹配?
谢谢!
答案 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;
}