Google Apps 脚本比较范围以找到匹配项
Google Apps Script compare ranges to find matches
我有 2 Sheets“客户(下表 1)”和“颜色描述(下表 2)”。我想使用 GAS 来做以下事情:
- onEdit 然后我想比较 2 个范围...
- 查找“客户 Sheet - Col2”匹配“颜色描述 Sheet - Col1”的每个实例
- 获取实例所在单元格的地址
- 在“客户端 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 的过程。
示例脚本:
在此示例脚本中,根据您的问题,使用了 Client
和 Color 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
}
我有 2 Sheets“客户(下表 1)”和“颜色描述(下表 2)”。我想使用 GAS 来做以下事情:
- onEdit 然后我想比较 2 个范围...
- 查找“客户 Sheet - Col2”匹配“颜色描述 Sheet - Col1”的每个实例
- 获取实例所在单元格的地址
- 在“客户端 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 的过程。
示例脚本:
在此示例脚本中,根据您的问题,使用了 Client
和 Color 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
}