需要帮助以JavaScript创建对象数组

时间:2020-01-16 13:32:38

标签: javascript arrays object google-apps-script google-sheets

我有两张纸

“会员”表格-600行。

“ MODERATOR”工作表-13行(这是“ MEMBER”工作表的子集)

两个工作表共享一个“成员密钥”列-用于标识成员的所有唯一值。

我想创建一个执行以下操作的函数

“ ...对于成员表中的每一行...”

“ ...比较MODERATOR工作表中的Member Key列。”

“如果“成员密钥”列匹配...”

“ ...从成员表中的特定行中提取值...”

”,并将它们与匹配的KEY列复制到MODERATOR工作表行中”

该代码应该使用其对应的成员记录中的信息来更新主持人记录

我为此编写的代码如下。

代码将运行,但是值不会更新。我认为它与我应用的for循环有关。我希望通过在数组中使用对象函数来解决此问题,但是我很难在代码中应用它们。

感谢您对我的问题或代码的总体反馈

function Moderator_Update() {


  var Metrics = SpreadsheetApp.openById("10Wl1B4AtdLHJXBbLbMQbSdtRyAb61biCWYpOQEEywIY");  // METRICS spreadsheet
  var Data = SpreadsheetApp.getActiveSpreadsheet(); // DATA spreadsheet

  var ModsDataSheet = Data.getSheetByName("The Moderator_Numbers");  // DATA "Member" sheet
  var ModsAllValues = ModsDataSheet.getRange(2, 1, ModsDataSheet.getLastRow()-1,ModsDataSheet.getLastColumn()).getValues(); //All values in DATA "Members" sheet

  var MembersDataSheet = Data.getSheetByName("The Member_Numbers") // DATA "Moderator" sheet
  var MembersAllValues = MembersDataSheet.getRange(2, 1, MembersDataSheet.getLastRow()-1,MembersDataSheet.getLastColumn()).getValues();

  for(var MO = ModsAllValues.length-1;MO>=0;MO--) // for each row in the "Moderator" sheet...
  {

    for(var M = MembersAllValues.length-1;M>=0;M--) // for each row in the "Member" sheet...
    { 

        if (MembersAllValues[M][17] == ModsAllValues[MO][27])  // If Member KEY matches Moderator Key.
        { 

          // delcare the following variables with values from the Member Sheet
          var Mod_MemberName = MembersAllValues[M][0];
          var Mod_MemberWebPage = MembersAllValues[M][2];
          var Mod_MemberTag = MembersAllValues[M][4];
          var Mod_MemberFirstName = MembersAllValues[M][5];
          var Mod_MemberLastName = MembersAllValues[M][6];
          var Mod_MemberEmail = MembersAllValues[M][7];


          // assign those values to the following cells in the Moderator Sheet
          ModsAllValues[MO][0] = Mod_MemberName;
          ModsAllValues[MO][2] = Mod_MemberWebPage;
          ModsAllValues[MO][5] = Mod_MemberTag;
          ModsAllValues[MO][6] = Mod_MemberFirstName;
          ModsAllValues[MO][7] = Mod_MemberLastName;
          ModsAllValues[MO][8] = Mod_MemberEmail;

       }
    } 
  }

   var ModDestinationRange = ModsDataSheet.getRange(2, 1, ModsAllValues.length, ModsAllValues[0].length); 

      ModDestinationRange.setValues(ModsAllValues);
}

Moderator Sheet Member Sheet

1 个答案:

答案 0 :(得分:0)

尝试一下:

这不是最快的解决方案,但是通过这种方式,您不必担心覆盖不属于更新内容的值的影响。

function Moderator_Update() {
  var Data=SpreadsheetApp.getActiveSpreadsheet();
  var mdsh=Data.getSheetByName("The Moderator_Numbers");
  var mdvA=mdsh.getRange(2,1,mdsh.getLastRow()-1,mdsh.getLastColumn()).getValues();
  var mrsh=Data.getSheetByName("The Member_Numbers");
  var mrvA=mrsh.getRange(2,1,mrsh.getLastRow()-1,mrsh.getLastColumn()).getValues();
  var mdkeyA=mdsh.getRange(2,28,mdsh.getLastRow()-1,mdsh.getLastColumn()).getValues().map(function(r){return r[0];});
  for(var j=0;j<mrvA.length;j++) { 
    var i=mdkeyA.indexOf(mrvA[j][17]);
    if(i>-1){ 
      mdsh.getRange(i+2,1).setValue(mrvA[j][0]);
      mdsh.getRange(i+2,3).setValue(mrvA[j][2]);
      mdsh.getRange(i+2,6).setValue(mrvA[j][4]);
      mdsh.getRange(i+2,7).setValue(mrvA[j][5]);
      mdsh.getRange(i+2,8).setValue(mrvA[j][6]);
      mdsh.getRange(i+2,9).setValue(mrvA[j][7]);
    }
  } 
}