google script Как сравнить ячейки в двух столбцах и установить значение для другой ячейки - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть уникальный идентификатор ('ID1') в столбце A на sheet1, и мне нужно сравнить его со столбцом B в sheet2, где находятся ID ('ID2').

Так что мне нужно сравнить те из ID и проверить, совпадают ли некоторые из них, если я хочу, я хочу изменить значение ячейки в той же строке, что и «ID1» в sheet1, но в другом столбце, скажем, C.

function IDValidation() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheetByName('Sheet1');
  var sheet2 = ss.getSheetByName("Sheet2");
  var Sheet1range = sheet1.getRange(2,1,sheet1.getLastRow()); //header is row 1
  var Sheet2range = sheet2.getRange(2, 2);    //header is row 1
  var Sheet1cellValue = Sheet1range.getValues();
  var Sheet2cellValue = Sheet2range.getValues();//Look here

  for(i = 0; i<Sheet1cellValue .length-1; i++){
     if(Sheet1cellValue [i][0] == Sheet2cellValue)
     {
       ss.getSheetByName("Sheet1").getRange(i+2,3).setValue("Close");

}
}
}

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Я думаю, вы все очень хорошо поняли, потому что ваш код является ответом на мою проблему :) Я добавил только в строку '10' -1 с длиной, чтобы не считать последнюю строку в sheet2, которая является пустой. И я буду менять setValue, конечно. Спасибо всем.

function IDValidation1() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sh1=ss.getSheetByName('Sheet1');
  var sh2=ss.getSheetByName("Sheet2");
  var sh1rg=sh1.getRange(2,1,sh1.getLastRow(),1); //header is row 1
  var sh2rg=sh2.getRange(2,2,sh2.getLastRow(),1);//header is row 1
  var sh1cvA=sh1rg.getValues();
  var sh2cvA=sh2rg.getValues();
  for(var i=0;i<sh1cvA.length-1; i++){
    for(var j=0;j<sh2cvA.length-1;j++) {
      if(sh1cvA[i][0]==sh2cvA[j][0]){
        sh1.getRange(i+2,3).setValue(Utilities.formatString('Sheet2 Row:%s == Sheet1 Row:%s = %s',j+2,i+2,sh1cvA[i][0]));
      }
    }
  }
}
0 голосов
/ 20 апреля 2019

Не уверен, что вы хотите, но просто пытаюсь помочь

Вот несколько вариантов.

Попробуйте:

function IDValidation() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sh1=ss.getSheetByName('Sheet1');
  var sh2=ss.getSheetByName("Sheet2");
  var sh1rg=sh1.getRange(2,1,sh1.getLastRow()); //header is row 1
  var sh2rg=sh2.getRange(2,2);//header is row 1
  var sh1cvA=sh1rg.getValues();
  var sh2cV=sh2rg.getValue();//look here
  for(var i=0;i<sh1cvA.length-1; i++){
    if(sh1cvA[i][0]==sh2cV){
      sh1.getRange(i+2,3).setValue("Close");
    }
  }
}

Лист1

enter image description here

Лист2

enter image description here

Кажется, что работает.Да / Нет?


Не знаю, возможно, вы ищете все совпадения между Sheet1 Column1 и Sheet2 Column2.Вот что делает эта функция.Я использую случайные числа от 0 до 50, а не уникальные идентификаторы, поэтому есть много совпадений.Я перестал вставлять close в колонку 3 и начал описывать, где совпадения.

Вот код:

function IDValidation1() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sh1=ss.getSheetByName('Sheet1');
  var sh2=ss.getSheetByName("Sheet2");
  var sh1rg=sh1.getRange(2,1,sh1.getLastRow(),1); //header is row 1
  var sh2rg=sh2.getRange(2,2,sh2.getLastRow(),1);//header is row 1
  var sh1cvA=sh1rg.getValues();
  var sh2cvA=sh2rg.getValues();
  for(var i=0;i<sh1cvA.length-1; i++){
    for(var j=0;j<sh2cvA.length;j++) {
      if(sh1cvA[i][0]==sh2cvA[j][0]){
        sh1.getRange(i+2,3).setValue(Utilities.formatString('Sheet2 Row:%s == Sheet1 Row:%s = %s',j+2,i+2,sh1cvA[i][0]));
      }
    }
  }
}

Вот лист1 После запуска:

enter image description here

А это Sheet2: (я выбрал слишком много строк и не смог уместить их все на моем экране)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...