我已经建立了一个包含多个选项卡的电子表格。
我的“源”选项卡 1 包含列“Id”和“名称”我的“目标”选项卡 2 包含“Id”
我试图遍历我的目标选项卡中的行并读取 Id 的值,然后在我的源选项卡中搜索 Id。当我找到 ID 时,我想获取“名称”字段中的值并将其添加到目标选项卡 ID 同一行的单元格中。
我很难处理遍历一个数组的逻辑并确保我在目标选项卡或目标选项卡内容的数组中找到值。在“目标”选项卡中,可能不止一次出现 Id,我需要全部更新它们。
欢迎大家提出意见!
我已经建立了一个包含多个选项卡的电子表格。
我的“源”选项卡 1 包含列“Id”和“名称”我的“目标”选项卡 2 包含“Id”
我试图遍历我的目标选项卡中的行并读取 Id 的值,然后在我的源选项卡中搜索 Id。当我找到 ID 时,我想获取“名称”字段中的值并将其添加到目标选项卡 ID 同一行的单元格中。
我很难处理遍历一个数组的逻辑并确保我在目标选项卡或目标选项卡内容的数组中找到值。在“目标”选项卡中,可能不止一次出现 Id,我需要全部更新它们。
欢迎大家提出意见!
这是一个建议:
/* let us say source array with name(columnA) & ID(columnB) is array 'source'
and target array with only IDs is array 'target', you get these with something like*/
var source = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getDataRange().getValues();
// and
var target = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1].getDataRange().getValues();// if other columns, change index values in the arrays : 0=A, 1=B ...
// then let's create a 3 rd array that will be the new target with ID + names, and call it 'newtarget'
var newtarget=new Array()
// the iteration could be like this :
for(i=0;i<target.length;++i){ // don't miss any ID
for(j=0;j<source.length;++j){ // iterate through source to find the name
if(target[i][0].toString().match(source[j][1].toString()) == source[j][1].toString()){
var newtargetrow=[source[j][0],target[i][0]] // if match found, store it with name (idx0) and ID (idx 1)
}else{
var newtargetrow=['no name found',target[i][0]] // if no match, show it in name column
}
newtarget.push(newtargetrow);// store result in new array with 2 columns
} //loop source
} // loop target
/* now you have a newtarget array that can directly overwrite the old target
using setValues() */
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];// assuming the target sheet is sheet nr2
sh.getRange(1,1,newtarget.length,newtarget[0].length).setValues(newtarget);
//
注意我没有测试这段代码,但它应该给你一个起点。我用 .match 对字符串进行了比较,但您可以使用其他比较(数组元素之间的直接相等)...如果工作表数据中存在不想要的空格的风险,您还可以删除 ID 中的空格...我没有不知道你的数据,所以这取决于你。