Как обмениваться значениями с использованием временного 2D-массива - PullRequest
1 голос
/ 03 июля 2019

В настоящее время я пытаюсь обменяться значениями между двумя столбцами (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 голосов
/ 03 июля 2019

Хорошо, я думаю, ваш код в правильном направлении, но его можно упростить.Прежде всего, я понимаю, что у нас есть два листа («Лист 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 столбцов в этих двух массивах.Каждый из них является двумерным, поэтому 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]); 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...