我正在尝试将工作表1中的2列(A:B)与工作表2(A:B)中的2列进行匹配,如果存在匹配项,则将工作表1中的C列匹配行的内容复制到工作表2中的匹配行。 / p>
我尝试修改多个脚本没有成功。下面的代码最接近我的要求,但是由于我对脚本的了解有限,所以我无法使其适应我的确切需求。
Sheet1
A B C
Week Rotation Working
Week1 11 In
Week1 5 In
Week1 4 In
Week1 3 In
Week1 3 Off
Week1 7 Off
Sheet2
A B C
Week Rotation Working
Week1 6
Week1 5
Week1 4
Week1 3
Week1 3
Week1 11 (In should be copied to here)
我的代码:
function MatchColumns(){
// gets spreadsheet A and the range of data
var sheetA
=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Testa");
var dataA = sheetA.getRange(2, 1, sheetA.getLastRow(),
2).getValues();
// gets spreadsheet B and the range of data
var sheetB =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test2");
var dataB = sheetB.getRange(2, 1, sheetB.getLastRow(),
1).getValues();
// Added
var res = [];
for (var b in dataB) {
for (var a in dataA) {
if (dataA[a][0] == dataB[b][0]) res.push([dataA[a][3]]);
}
if (b != res.length - 1) res.push([""]);
}
sheetB.getRange(2, 2, res.length, res[0].length).setValues(res);
答案 0 :(得分:0)
请注意,JavaScript是使用0基索引的众多语言之一。因此res.push([dataA[a][3]])
会将行中的第4个值放入结果数组,即D列。
您的dataA
和dataB
变量实际上并不包含C列数据,因为您仅使用2列数据对其进行了初始化。因此dataA[a][2]
和dataA[a][3]
都是undefined
。
您可能不想通过push
将这些新值收集到数组中,因为这将丢失A和B中匹配的哪一行与您写入的哪一行之间的相关性。为了避免丢失C列中的现有信息,您需要从工作表2中读取它并分配给特定的索引:
var destC = sheet2.getRange(2, 3, sheet2.getLastRow() - 1, 1).getValues();
/** Find matched rows */
...
destC[b][0] = dataA[a][2];
...
// Lastly, write values
sheet2.getRange(2, 3, destC.length, 1).setValues(destC);
答案 1 :(得分:0)
尝试使用嵌套的来迭代Sheet1和Sheet2中的值,并将它们与
进行比较function MatchColumns(){
// gets spreadsheet A and the range of data
var sheetA = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var dataA = sheetA.getRange(2, 1, sheetA.getLastRow() - 1, 2).getValues();
// gets spreadsheet B and the range of data
var sheetB = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
var dataB = sheetB.getRange(2, 1, sheetB.getLastRow() - 1, 2).getValues();
for (var x = 0; x < sheetA.getLastRow() - 1; x++){
for (var y = 0; y < sheetB.getLastRow() - 1; y++){
if (dataA[x][0] == dataB[y][0]){
if (dataA[x][1] == dataB[y][1]){
sheetB.getRange(y + 2, 3).setValue(sheetA.getRange(x + 2, 3).getValue());
}
}
}
}
}
如果列和B中的对应单元格匹配,则将Sheet1中C列的值复制到Sheet2中C列。