我目前正在尝试在两列(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);};
发布于 2019-07-03 22:04:27
好吧,我认为你的代码是在一个好的方向上,但它可以被简化。首先,我知道我们有两个工作表(“工作表29”和“应用程序和固件的标签”),您希望将值从H复制到G,以防G等于第二个工作表中的B。正如我在我的评论中所说的,如果你只想得到同一范围内的两列,你应该使用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的所有行,对于带有A和B的tempArray2也是如此。您可以分别使用x和x访问数据。在此之后,您可以只比较temparray1和temparray2的值,并写入从G (temparrayi)到H (temparrayi,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]);
}https://stackoverflow.com/questions/56867563
复制相似问题