Сравнение нескольких столбцов одновременно с помощью скриптов приложений - PullRequest
0 голосов
/ 20 января 2020

Мне нужна помощь в определении наиболее эффективного способа сравнения комбинаций столбцов в одной строке листа с другой.

У меня есть две таблицы, в каждой из которых есть четыре столбца: Штат, Площадь, Город и Местоположение.

Таблица PINPOINT - в этой таблице есть уникальная комбинация значений

Таблица FEED - в этой таблице есть повторяющаяся комбинация значений, а также значение KEY из таблицы PINPOINT.

Мне нужен код, который говорит

"Если строка из столбца CL на листе FEED содержит значение ключа из столбца K на листе PINPOINT,

... но столбцы CN к CQ, что строка листа FEED не имеет тех же значений, что и столбец AD в таблице PINPOINT ...

обновить столбец CN, чтобы CQ лист FEED с той же комбинацией значений, что и AD в таблице PINPOINT . "

Я вставил последний код, который у меня есть ниже, а также изображения. Это дает мне массив, говорящий, что массивы являются «неопределенными». Я только начал изучать код, поэтому я рад переписать это, если кто-то предложит решение.

В любом случае, любое понимание того, как я должен написать это, будет весьма полезно.

var Data = SpreadsheetApp.getActiveSpreadsheet(); // DATA spreadsheet

  var PinpointDataSheet = Data.getSheetByName("The Pinpoints") // DATA "Pinpoint" sheet
  var PinpointAllValues = PinpointDataSheet.getRange(2, 1, PinpointDataSheet.getLastRow()-1,PinpointDataSheet.getLastColumn()).getValues();


  var FeedDataSheet = Data.getSheetByName("The Feed_Raw") // DATA "Feed" sheet
  var FeedAllValues = FeedDataSheet.getRange(2, 1, FeedDataSheet.getLastRow()-1,FeedDataSheet.getLastColumn()).getValues();

  var PinpointStateObj = {}; // Object for "Locale" values
  var PinpointAreaObj = {}; // Object for "Locale" values
  var PinpointCityObj = {}; // Object for "Locale" values
  var PinpointSpotObj = {}; // Object for "Locale" values

  for(var P = PinpointAllValues.length-1;P>=0;P--) // put Pinpoint values in array..

  {
    PinpointStateObj[PinpointAllValues[P][0]] = PinpointAllValues[P][10]; 
    PinpointAreaObj[PinpointAllValues[P][1]] = PinpointAllValues[P][10]; 
    PinpointCityObj[PinpointAllValues[P][2]] = PinpointAllValues[P][10];
    PinpointSpotObj[PinpointAllValues[P][3]] = PinpointAllValues[P][10]; 
  }

  for(var F = FeedAllValues.length-1;F>=0;F--) // for each row in the "Feed" sheet...
  { 
   var Feed_GeotagKey = FeedAllValues[F][90]; // Pinpoint Key values in Feed sheet
    {
      // If Pinpoint array dont match feed values
      if ((PinpointStateObj[Feed_GeotagKey] != FeedAllValues[F][95]) || (PinpointAreaObj[Feed_GeotagKey] != FeedAllValues[F][96]) 
        || (PinpointCityObj[Feed_GeotagKey] != FeedAllValues[F][97]) || (PinpointSpotObj[Feed_GeotagKey] != FeedAllValues[F][97]))
        {
        FeedAllValues[F][95] = PinpointAllValues[P][0]; // ...Change FYI Category Name in FYI Topic Sheet 
        FeedAllValues[F][96] = PinpointAllValues[P][1];
        FeedAllValues[F][97] = PinpointAllValues[P][2];
        FeedAllValues[F][98] = PinpointAllValues[P][3];

      }
    }
  }

Geotag Sheet - уникальные значения «Темная колонна» Feed Sheet - повторяющиеся значения - «Выделенная колонна»

1 Ответ

0 голосов
/ 20 января 2020
  1. У вас есть ошибка ввода - пожалуйста, измените

PinpointStateObj[PinpointtAllValues[P][0]] = PinpointAllValues[P][10];

на

PinpointStateObj[PinpointAllValues[P][0]] = PinpointAllValues[P][10];

Ваш оператор if содержит (PinpointHoodObj[Feed_GeotagKey] != FeedAllValues[F][97]), но у вас нет массива с именем inpointHoodObj - я предполагаю, что вы имеете в виду PinpointCityObj

Что касается В остальном коде трудно сказать, работает ли он так, как задумано, не видя электронную таблицу (каковы значения, например, PinpointAllValues[P][10] или FeedAllValues[F][95]?), а остальную часть кода (где вы назначаете правильно отсортированные значения для ваш диапазон в FEED, но в качестве общего совета:

Используйте indexOf () . Это Javascript метод, который позволяет ОБА узнать либо ключ содержится в массиве и извлекает его позицию в массиве.

Пример:

...
//check either PinpointStateObj[Feed_GeotagKey] is contained in row FeedAllValues[F]
if(FeedAllValues[F].indexOf(PinpointStateObj[Feed_GeotagKey])!=-1){
//if the key value is contained in the row - find its position (column)
  var columnNumber=FeedAllValues[F].indexOf(PinpointStateObj[Feed_GeotagKey])+1;
  //implement a comparison either the column where the key value is contained corresponds to the desired one
  ...
  }
...
...