Сравнение нескольких значений в Google Sheets с помощью App Script для циклов - PullRequest
0 голосов
/ 24 января 2020

Я хотел бы сравнить несколько значений в электронной таблице Google Sheet, некоторые из которых используют циклы for в Google App Script. Но я хотел бы получить несколько советов о том, как лучше всего это сделать.

Чтобы объяснить ниже ...

У меня есть две таблицы, таблица "FOOD" и таблица "FOOD GROUP" ,

Я написал скрипт для l oop, который проходит через всю таблицу FOOD.

Если значение ключа обеих таблиц совпадает, скрипт обновит столбец из таблицы FOOD со столбцом из таблицы FOOD GROUP.

Сценарий работает без проблем. Но он может сравнивать только один столбец между двумя таблицами одновременно. Я хотел бы изменить этот скрипт, чтобы я мог сравнивать несколько столбцов одновременно, без необходимости создавать для l oop для каждого указанного столбца.

Я вставил свой код ниже. Я также могу предоставить изображения моей таблицы, если вам это нужно.

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

function FoodGroup_Test() {


  var Data = SpreadsheetApp.getActiveSpreadsheet(); 

  var FoodGroupDataSheet = Data.getSheetByName("Food Groups") // "FoodGroup" sheet
  var FoodGroupAllValues = FoodGroupDataSheet.getRange(2, 1, FoodGroupDataSheet.getLastRow()-1,FoodGroupDataSheet.getLastColumn()).getValues();
  var FoodGroupDataLastRow = FoodGroupDataSheet.getLastRow();


  var FoodDataSheet = Data.getSheetByName("Food") // "Food" sheet
  var FoodAllValues = FoodDataSheet.getRange(2, 1, FoodDataSheet.getLastRow()-1,FoodDataSheet.getLastColumn()).getValues();

 // Object to contain all FoodGroup column values
  var Object = {};


   for(var FO = FoodGroupAllValues.length-1;FO>=0;FO--) // for each row in the "FoodGroup" sheet...
  {

    Object[FoodGroupAllValues[FO][15]] = FoodGroupAllValues[FO][11]; // ...store FoodGroup ID Key value
  }


   for(var F = FoodAllValues.length-1;F>=0;F--) // for each row in the "Food" sheet...
  {  

    var Food_FoodGroupKey = FoodAllValues[F][94]; // Store FoodGroup Key value. 

    // ...if the Food value dont match, update it with FoodGroup's value
      if (Object[Food_FoodGroupKey] != FoodAllValues[F][95])  
      { 
        FoodAllValues[F][95] = Object[Food_FoodGroupKey]; 
      }

  }

  // declare range to place updated values, then set it.
  var FoodDestinationRange = FoodDataSheet.getRange(2, 1, FoodAllValues.length, FoodAllValues[0].length); 

  FoodDestinationRange.setValues(FoodAllValues);


}

Стол FOOD GROUP Стол FOOD

1 Ответ

0 голосов
/ 29 января 2020

Чтобы ваш код работал должным образом, вы должны внести следующие изменения в свой код:

  1. Обновите условие if до следующего:
Object[Food_FoodGroupKey] != FoodAllValues[F][95] && object2[] != FAllValues[F][86])
Чтобы избежать проблемы undefined, используйте следующую строку кода:
FoodDataSheet.createTextFinder("undefined").replaceAllWith("");
...