我一直在使用一些代码来更新两张纸之间的值,其中第一列中的值在第一列的下一个匹配行之间相等地传输。现在,我需要修改代码以为所有列数据传输整行,就像这样(对于很多列而言):
表格1
ID ID2 ID3 Transfer1 Transfer2 Transfer3
1 11 44 Foo Loo Klo
3 33 66 boo Sho Loo
4 44 77 Sho Boo Foo
说明2开始:
ID
1
4
3
表格2变为:
ID ID2 ID3 Transfer1 Transfer2 Transfer3
1 11 44 Foo Loo Klo
4 44 77 Sho Boo Foo
3 33 66 boo Sho Loo
我一直在使用以下代码:
function updateEntrees() {
var ss=SpreadsheetApp.openById('1IPmsw4a0_OXn7IPKFLkguBtkUG3wxE4zvtdi5uTr3ZM');
var sh1=ss.getSheetByName('Sheet1');
var rg1a=sh1.getRange(2,1,sh1.getLastRow()-1,1);
var vA1a=rg1a.getValues();
var rg1b=sh1.getRange(2,2,sh1.getLastRow()-1,1);
var vA1b=rg1b.getValues();
var sh2=ss.getSheetByName('Sheet2');
var rg2a=sh2.getRange(2,1,sh2.getLastRow()-1,1);
var vA2a=rg2a.getValues();
var rg2b=sh2.getRange(2,2,sh2.getLastRow()-1,1);
var vA2b=rg2b.getValues();
for(var i=0;i<vA1a.length;i++) {
for(var j=0;j<vA2a.length;j++) {
if(vA1a[i][0]==vA2a[j][0]) {
vA2b[j][0]=vA1b[i][0]
}
}
}
rg2b.setValues(vA2b);
}
任何帮助将不胜感激。
答案 0 :(得分:1)
如果我的理解正确,那么这个答案如何?请认为这只是几个答案之一。
如果您的脚本被修改,那么以下修改如何?修改点在于,它使用queue.front
检索所有列,并且在getLastColumn()
和vA1b
的数组长度之间相同。并且,当“ Sheet1”和“ Sheet2”之间的列“ A”的值相同时,vA2b
的行将复制到vA1b
的行。
vA2b
与其他模式一样,以下脚本如何?
function updateEntrees() {
var ss=SpreadsheetApp.openById('1IPmsw4a0_OXn7IPKFLkguBtkUG3wxE4zvtdi5uTr3ZM');
var sh1=ss.getSheetByName('Sheet1');
var rg1a=sh1.getRange(2,1,sh1.getLastRow()-1,1);
var vA1a=rg1a.getValues();
var rg1b=sh1.getRange(2,2,sh1.getLastRow()-1,sh1.getLastColumn() - 1); // Modified
var vA1b=rg1b.getValues();
var sh2=ss.getSheetByName('Sheet2');
var rg2a=sh2.getRange(2,1,sh2.getLastRow()-1,1);
var vA2a=rg2a.getValues();
var rg2b=sh2.getRange(2,2,sh2.getLastRow()-1,sh1.getLastColumn() - 1); // Modified
var vA2b=rg2b.getValues();
for(var i=0;i<vA1a.length;i++) {
for(var j=0;j<vA2a.length;j++) {
if(vA1a[i][0]==vA2a[j][0]) {
vA2b[j]=vA1b[i]; // Modified
}
}
}
rg2b.setValues(vA2b);
}
如果我误解了您的问题,而这不是您想要的结果,我深表歉意。
在回复评论中,添加了the following request。
是否可以对此进行修改,以便在sheet2中不存在但在sheet1中存在新值的情况下将整个新行插入为新行项?
对于上述其他要求,修改后的脚本如下。
function updateEntrees() {
var ss = SpreadsheetApp.openById('1IPmsw4a0_OXn7IPKFLkguBtkUG3wxE4zvtdi5uTr3ZM');
var sheet1 = ss.getSheetByName('Sheet1');
var sheet2 = ss.getSheetByName('Sheet2');
var lastCol1 = sheet1.getLastColumn();
var value1 = sheet1.getRange(2, 1, sheet1.getLastRow() - 1, lastCol1).getValues();
var obj = value1.reduce(function(o, e) {
o[e[0]] = e;
return o;
}, {});
var range2 = sheet2.getRange(2, 1, sheet2.getLastRow() - 1, lastCol1);
var result = range2.getValues().map(function(row) {return row[0] in obj ? obj[row[0]] : row});
range2.setValues(result);
}