如何使用临时2D数组交换值

时间:2019-07-03 10:01:35

标签: google-apps-script google-sheets

我目前正在尝试在两列(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);

};

1 个答案:

答案 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]); 
    }