如何在谷歌应用程序脚本中使用来自 2 列的 concat 值作为参数执行 VLOOKUP

微笑的鲍勃

我只想在谷歌应用程序脚本中使用 2 列的 concat 结果作为参数进行 vlookup,以匹配来自不同电子表格的列,然后获取匹配行的值。这是示例:

电子表格 1

数字 类型 姓名 城市
12345 数字1
6789 num2
12345 数字1

电子表格 2

ID 年龄 姓名 城市
12345num1 22 安德烈亚 纽约
6789num2 23 罗马 加利福尼亚

案例:我想连接电子表格 1 中的 2 列(数字和类型)并检查连接结果是否与电子表格 2 中的“ID”列相同,然后获取“名称”和“城市”列的值从电子表格 2 中取值并将值设置为电子表格 1 的列。 注意:电子表格 1 中的数据可以是重复数据和动态数据。

从我的代码中,我已经制定了匹配方法,但问题是设置值有一个错误,说“数据中的列数与范围内的列数不匹配。数据有 2,但范围有 1 。” 如果我将 numColumns 的范围更改为 2,那么它将再次显示错误(范围为 2,但数据为 1)。

有没有人可以从我的代码中解决这个问题?你们可以编写自己的代码作为案例的解决方案,它也很有帮助。谢谢

function main3() {
  var target_file = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var concat = target_file.getRange(2, 1, target_file.getLastRow() - 1, target_file.getLastColumn()).getValues();
  var source_file = SpreadsheetApp.openById("").getSheetByName("");
  var source_data = source_file.getRange(2, 1, source_file.getLastRow() - 1, source_file.getLastColumn()).getValues();
  var temp = [];
  var temp2 = [];
  for (var i = 0; i < concat.length; i++) {
    temp[i] = [concat[i][0] + concat[i][1]];
    temp2.push(temp[i]);
  }
  var matching = temp2.map(row => {
    var row_match = source_data.find(r => r[0] == row[0])
    return row_match ? [row_match[2], row_match[3]] : [null]
    
  })
  target_file.getRange(2, 2, matching.length, matching[0].length).setValues(matching); error
}
大师

您在这里创建了不相等数量的列:

返回行匹配?[row_match[2],row_match[3]]:[null]

如果找到行匹配,则该函数每行返回两个列元素,否则只返回一个。你需要一个统一的数组:

return row_match ? [row_match[2], row_match[3]] : [null, null]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章