![](/img/trans.png)
[英]Lookup Values in one column and if match add the values from a different column Google Script Google Sheets
[英]Search for a match between 2 values on different sheets and retrieve data from an other column into the first sheet with google app script
情况如下:我有一张表,其中有一列中的数据,我想,如果在我的第二张表中(在已识别的列中)有数据匹配,则将另一列中的数据检索到我的第一张表中。
更明确地说:
我不知道如何存储这些数据并在另一张表中进行输入。
以下是我到目前为止发现的内容:
function updateNote() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssDeCo = ss.getSheetByName("Deco");
var lr1 = ssDeCo.getLastRow();
var ssDataBase = ss.getSheetByName("Database");
var lr2 = ssDataBase.getLastRow();
for (var i = 2; i < lr1; i++) {
var gencodDeCo = ssDeCo.getRange('E').getValue();
for (var j = 2; i < lr2; i++) {
var gencodDataBase = ssDataBase.getRange('A').getValue();
var evalDataBase = ssDataBase.getRange('D').getValue();
if (gencodDeCo[i] == gencodDataBase[j]) {
ssDeCo.getRange('I').setValue(evalDataBase);
}
}
}
};
OP 正在尝试将 Sheet1 中的数据匹配到 Sheet 2,然后使用匹配的 Sheet2 值的 D 列中的数据填充 Sheet 1 上相应行的 I 列中的单元格。 OP 的问题在于获取相关的 Sheet 2 Column D 数据,然后将其保存到 Sheet1 中 D 列的相应行。
与 OP 代码的相关差异是:
getValues()
方法 => 更快、更高效的代码。getValues()
的 2D 值可能如下所示:Indexof
方法用于查找匹配项。setValues()
方法一起使用,以更新 Deco Column D 中的值我在代码中留下了一些“记录器”语句,以便用户可以在代码进行时找到相关值。
function so5813783501() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssDeCo = ss.getSheetByName("Deco");
var lr1 = ssDeCo.getLastRow();
var ssDataBase = ss.getSheetByName("Database");
var lr2 = ssDataBase.getLastRow();
// get the data from database
var dbRange =ssDataBase.getRange(2,1,lr2-1,4);
// Logger.log("DEBUG: dbRange = "+dbRange.getA1Notation());
var dbData = dbRange.getValues();
// get ColA data from database
var dbColA = ssDataBase.getRange(2,1,lr2-1,1);
// Logger.log("DEBUG: dbColA = "+dbColA.getA1Notation());
var dbColAData = dbColA.getValues();
// flatten the data on ColA of the database
var flatCola =dbColAData.reduce(function(a, b){return a.concat(b);});
// Logger.log(flatCola); // DEBUG
// get the data from Deco
var decoRange = ssDeCo.getRange(2,5,lr1-1,1);
// Logger.log("DEBUG: decoRange = "+decoRange.getA1Notation());
var decoData = decoRange.getValues();
// Logger.log(decoData); DEBUG
// flatten the Deco data array
var flatDeco =decoData.reduce(function(a, b){return a.concat(b);});
// Logger.log(flatDeco); // DEBUG
var updateColI = [];
// Loop through the Deco data to find match on Database
for (var i=0;i<decoData.length;i++){
// find a match on database Column A
var idx = flatCola.indexOf(decoData[i][0]);
//Logger.log("DEBUG: i = "+i+", value = "+decoData[i][0]+", and idx = "+idx)
// if idx = -1, then no match, otherwise macth value if the sequence number on the database.
if (idx !=-1){
// do something
updateColI.push([dbData[idx][3]]);
}
else{
updateColI.push([""]);
}
}
// Logger.log(updateColI); //DEBUG
// update Deco
var fillDeco = ssDeCo.getRange(2,9,lr1-1,1);
Logger.log("DEBUIG: Fill Deco range = "+fillDeco.getA1Notation())
fillDeco.setValues(updateColI);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.