我目前正在尝试在两列(G和H)之间交换值
如果在另一个工作表的第一列表引用中找到第一工作表列G值,则它们不会移动。 如果在第二列表格参考中找到它们, 他们必须将值与第一工作表列H的值替换为相同的索引。
此代码适用于G列,但不适用于H列。它给出了元素,但没有顺序。
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet29'); //au cas ou ca bug
var lr = spreadsheet.getLastRow();
var lc = spreadsheet.getLastColumn();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName('Sheet29');
var sheet2 = ss.getSheetByName('Tabs of applications and firmwares');
var range1 = sheet1.getRange(2, 7, sheet1.getLastRow(), 9);
var range2 = sheet2.getRange(2, 1, sheet2.getLastRow(), 4);
var values1 = range1.getValues();
var values2 = range2.getValues();
var compteurBon = 0;
var compteurMauvais = 0;
var tempArray1 = [];
for (var i = 0; i < values1.length; i++) {
for (var j = 0; j < values2.length; j++) {
if (values1[i][0] === values2[j][0]) {
compteurBon++;
} else if (values1[i][0] == values2[j][2]) {
compteurMauvais++;
var tempArrayValue1 = values1[i][0];
tempArray1.push(tempArrayValue1);
values1[i][0] = values1[i][1];
values1[i][1] = tempArray1; // here it doesn't take the right value
}
}
}
range1.setValues(values1);
};
答案 0 :(得分:0)
好的,我认为您的代码方向正确,但可以简化。首先,我了解我们有两张纸(“ Sheet 29”和“ Tabs of application and firmwares”),并且如果第二张纸中的G等于B,您想将值从H复制到G。正如我在评论中所说,如果只想获得同一范围内的两列,则应使用sheetx.getRange(2,col,sheet1.getLastRow(),2);最后的“ 2”是您要进入范围的列数(分别为G和H,A和B)。如果我们坚持您的方法,我们将需要另一个tempArray变量:
for (var i = 0; i < values1.length - 1; i++) {
tempArray1.push(values1[i].toString().split(","));
tempArray2.push(values2[i].toString().split(","));
}
我们在这里所做的是将4列放入这两个数组中。它们中的每一个都是2D,因此tempArray1包含G和H的所有行,而tempArray2的A和B都是相同的。您可以分别使用[x] [0]和[x] [1]访问数据。 之后,您可以比较temparray1和temparray2的值,并将值从G(temparray [i] [1])写入H(temparray [i,7])
if (tempArray1[i][0] == tempArray2[i][0]) {
compteurBon++;
} else if (tempArray1[i][0] == tempArray2[i][1]) {
sheet1.getRange(i+2 , 7).setValue(tempArray1[i][1]);
}