我已经阅读了这两个链接Google Script: Conditionally copy rows from one spreadsheet to another和https://stackoverflow.com/a/4809413/1526044,在尝试后我无法完成我需要的工作。
我有一个电子表格,其中包含一张纸上的一些数据。 此外,我还有另一张表格,其中包含有关列的关键信息,以便进行比较:
KEY Value1 Value2 Value3
AAA B C D
BBB Y Z W
我需要一个函数来逐行检查我的DATA电子表格,以查找密钥表上列值的值。当找到任何值时,它会在DATA电子表格的第一列(同一行)上记下KEY值。
实施例: 数据电子表格
empty text text text B
empty text text text text
empty text C text text
empty text text text Y
因此在脚本之后,DATA将如下所示:
AAA text text text B
empty text text text text
AAA text C text text
BBB text text text Y
任何其他建议,将不胜感激。 非常感谢你。
答案 0 :(得分:1)
我修改了一个我最近回答的类似脚本应该做你需要的。我没有测试,但你可以尝试一下。有一些评论可以解释这个想法......它可能需要一些调试。
编辑:我玩了这个并调试了一下;-)所以它现在似乎正常工作 - 这里是the link to my test sheet
function xxx(){
/* we have an array 'keysheet'
and an array datasheet , you get these with something like*/
var keysheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getDataRange().getValues();
// and
var datasheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1].getDataRange().getValues();// if other columns, change index values in the arrays : 0=A, 1=B ...
// the iteration could be like this :
for(i=0;i<datasheet.length;++i){ // don't miss any data
for(j=0;j<keysheet.length;++j){ // iterate through keysheet to find the keys
for(k=1;k<keysheet[0].length;++k){ // iterate in keysheet row to check every column except first one
var key = keysheet[j][k]
Logger.log(k+' '+key+" "+datasheet[i].toString().match(key))
if(datasheet[i].toString().match(key) == key){// check whole rows to find if key is in data
var x = datasheet[i].shift();
datasheet[i].unshift(keysheet[j][0]) // if match found, replace first element in datasheet with fisrt element in keysheet
break // if found break k loop maybe you should also break j loop ?
}
}
} //loop keysheet
} // loop datasheet
/* now you have a modified datasheet array that can directly overwrite the old datasheet
using setValues() */
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];// assuming the datasheet sheet is sheet nr2
Logger.log(datasheet)
sh.getRange(1,1,datasheet.length,datasheet[0].length).setValues(datasheet);
}
//