Google Script для сопоставления ячейки между двумя листами и обновления ячейки во втором листе - PullRequest
0 голосов
/ 03 июля 2019

В листе 1 у меня есть данные, которые обновляются в ячейке A2 и ячейке B2.Когда они обновляются, я хочу запустить скрипт, который сопоставляет значение в A2 со столбцом Q на другом листе, и когда он находит совпадение, обновляет соответствующую строку в столбце R данными в ячейке B2 из листа sheet1.Все варианты, которые я нашел, выглядят так, чтобы перемещать целые строки или не сработали.Я новичок в Script, так как годами пользуюсь VBA, и, похоже, есть только смутное сходство.

1 Ответ

0 голосов
/ 03 июля 2019

Как то так?

function onSheetEdit(e)
{
  // get the source range that was edited
  var sourceRange = e.range;

  // get the associated sheet
  var sourceSheet = sourceRange.getSheet();

  // get the sheet name
  var sourceSheetName = sourceSheet.getName();

  if(sourceSheetName == "Sheet1")
  {
    // if the range edited was one we carea bout
    if(sourceRange.getA1Notation() == "A2" || sourceRange.getA1Notation() == "B2")
    {

      // get the values
      var values = sourceSheet.getRange("A2:B2").getDisplayValues()[0];

      // open the destination sheet
      var destinationSheet = SpreadsheetApp.openById("1ldtZdDiml01_Drlp2WvZ3CaSgABoubauok3BcVq11eI").getSheetByName("Sheet1");

      // find the column number of the column we're going to look against
      var searchColumnNumber = destinationSheet.getRange("Q1").getColumn();

      // get all of the values for the column
      var destinationSheetColumnRValues = destinationSheet.getSheetValues(1, searchColumnNumber, -1, 1);

      // find the row that has the value we want
      var foundRow = destinationSheetColumnRValues.reduce(function(accumulator, currentValue, index) {
        if(currentValue[0] == values[0] && accumulator == -1) return index;
        return accumulator;
      }, -1);

      // if we found it
      if(foundRow != -1)
      {
        // set the value in the destination sheet
        destinationSheet.getRange("R" + (foundRow + 1 )).setValue(values[1]);
      }
    }
  }
}

Вам нужно установить эту функцию как триггер on edit на листе. Подробнее см. https://developers.google.com/apps-script/guides/triggers/events.

Этот код можно сделать более эффективным в зависимости от ситуации. Например, если столбец назначения всегда сортируется или столбец, по которому выполняется поиск, никогда не изменяется, и т. Д.

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