Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将Google工作表中的多个值与循环的应用程序脚本进行比较_Arrays_Object_For Loop_Google Apps Script_Google Sheets - Fatal编程技术网

Arrays 将Google工作表中的多个值与循环的应用程序脚本进行比较

Arrays 将Google工作表中的多个值与循环的应用程序脚本进行比较,arrays,object,for-loop,google-apps-script,google-sheets,Arrays,Object,For Loop,Google Apps Script,Google Sheets,我想比较Google Sheet电子表格中的多个值,其中一些用于Google应用程序脚本中的循环。但是我想听听关于最好的方法的建议 下面解释一下 我有两张电子表格,一张“食物”表和一张“食物组”表 我写了一个for循环脚本,它贯穿了整个食物表 如果两个表的键值都匹配,脚本将用食物组表中的一列更新食物表中的一列 该脚本工作正常。但它一次只能比较两个表之间的一列。我想修改此脚本,以便可以一次比较多个列,而无需为每个指定列创建for循环 我把代码贴在下面。如果您需要,我还可以提供电子表格的图像 在任何

我想比较Google Sheet电子表格中的多个值,其中一些用于Google应用程序脚本中的循环。但是我想听听关于最好的方法的建议

下面解释一下

我有两张电子表格,一张“食物”表和一张“食物组”表

我写了一个for循环脚本,它贯穿了整个食物表

如果两个表的键值都匹配,脚本将用食物组表中的一列更新食物表中的一列

该脚本工作正常。但它一次只能比较两个表之间的一列。我想修改此脚本,以便可以一次比较多个列,而无需为每个指定列创建for循环

我把代码贴在下面。如果您需要,我还可以提供电子表格的图像

在任何情况下,我对编码都是新手,所以任何有建设性的反馈或洞察都会对我的脚本有所帮助。如果有什么不清楚的地方,我很乐意回答任何问题

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);


}

为了使代码按预期工作,您应该对代码进行以下更改:

  • 将您的<代码>如果条件更新为此条件:
  • 为避免
    未定义的问题,请使用以下代码行:

  • 为什么你要用一个脚本来做这件事,而不是虚报价值?@J.G.出于各种原因,实际上太多了,无法全部列出。但其中一个主要问题是,我正在使用第三方应用程序在电子表格中输入数据。带有外部公式的电子表格会影响应用程序的性能。另外,根据我的经验,应用程序脚本的性能更可靠。你只需要添加一个“and”条件。类似于:
    Object[Food\u FoodGroupKey]!=食品价值[F][95]&&object2[]!=FAllValues[F][86])
    Hey@Neo,你介意也分享一份你的工作表吗?干杯@ale13在帖子中添加了我的电子表格截图。希望能有帮助。如果没有问题,请告诉我。我算出了第二部分,并且已经在代码中添加了它(参见前面的注释)。我将添加第一部分。您介意我问一下“object2[]”如何影响“if”条件吗?
    Object[Food_FoodGroupKey] != FoodAllValues[F][95] && object2[] != FAllValues[F][86])
    
    FoodDataSheet.createTextFinder("undefined").replaceAllWith("");