Google Apps 脚本比较范围以找到匹配项

Google Apps Script compare ranges to find matches

我有 2 Sheets“客户(下表 1)”和“颜色描述(下表 2)”。我想使用 GAS 来做以下事情:

  1. onEdit 然后我想比较 2 个范围...
  2. 查找“客户 Sheet - Col2”匹配“颜色描述 Sheet - Col1”的每个实例
  3. 获取实例所在单元格的地址
  4. 在“客户端 Sheet - Col3(单元格地址)”中设置该值

所需的输出如下所示: [约翰 |红色 |颜色说明A2】或【贝丝|粉色 |颜色说明 A7]

e 由电子表格中的多项内容触发

Client Color Cell Address
Jon red
Beth pink
Tom blue
Cj red
Omar green
Lisa Purple
Color Description
Red Something about Red
Green Something about Green
Blue Something about Blue
Purple Something about Purple
White Something about White
Pink Something about Pink

我希望这是有道理的。 TIA 为您提供帮助。

我相信你的目标如下。

  • 您想使用 Google Apps 脚本实现问题 1 到 4 的过程。

示例脚本:

在此示例脚本中,根据您的问题,使用了 ClientColor Description 的 sheet 名称。关于这一点,请根据您的实际情况进行修改。

function myFunction() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const client = ss.getSheetByName("Client");
  const colorDescription = ss.getSheetByName("Color Description");
  const obj = colorDescription.getRange("A2:B" + colorDescription.getLastRow()).getValues().reduce((o, [a, b]) => (o[a.toLowerCase()] = b, o), {});
  const values = client.getRange("B2:B" + client.getLastRow()).getValues().map(([b]) => [obj[b.toLowerCase()] || ""]);
  client.getRange(2, 3, values.length, 1).setValues(values);
}
  • 当此脚本为 运行 时,Color Description sheet 的“B”列的值被放入 Client [=52] 的“C”列=] 通过搜索 Color.
  • 的值

注:

  • 在此示例脚本中,它假定每个 sheet 的第一行是问题中示例 sheet 中的 header 行。
  • 我无法理解 onEdit I want to compare 2 ranges then...onEdit。在我提议的脚本中,脚本可以通过脚本编辑器、按钮、自定义菜单等运行。但是如果你想运行使用OnEdit的脚本,你能提供执行脚本的条件吗?据此,我想修改一下。

参考文献:

这是我想到的。对不起,如果这有点笨拙,因为我是新手。

function myFunction() {
    var clientColors = SpreadsheetApp.getActiveSpreadsheet();
    var clientSheet = clientColors.getSheetByName("Client");
    var colorSheet = clientColors.getSheetByName("Color Description");
    var lastRownumberClient = clientSheet.getLastRow();
    var lastRownumberColor = colorSheet.getLastRow();
    var clientSheetVals = clientSheet.getRange(2,2,lastRownumberClient-1,1).getValues();//-1 to remove header row
    var colorSheetVals = colorSheet.getRange(2,1,lastRownumberColor-1,1).getValues();//-1 to remove header row

    var colorColA = clientSheetVals.map(function(row){//This maps out ColB in the client sheet and returns the matches from ColA in the color sheet
    var theItem = row[0];
    var  lookupColorRangeValues = colorSheetVals.map(function(row){return row[0];});            
    var index = lookupColorRangeValues.indexOf(theItem)+2;
      
    return ['A'+[index]]});//'A' concatenates the the column letter to the returned index number
 
 
 
 clientSheet.getRange(2,3,clientSheet.getLastRow()-1,1).setValues(colorColA);//Sets the returned values in ColC of the client sheet -1 to remove header row
}