Javascript google电子表格:根据匹配设置单元格的值

时间:2014-06-13 09:24:32

标签: javascript google-sheets

我在google电子表格中创建世界杯支架,并希望根据匹配的两个单元格的值设置单元格的值。

我的代码设置单元格02的值,而不管匹配的单元格(B3和B10)。

我不确定如何解决?

    function groupAA() {

       var ss           = SpreadsheetApp.getActiveSpreadsheet();
       var sheet        = ss.getActiveSheet();
       var groupA       = ss.getRangeByName("groupA");
       var groupAvalues = groupA.getValues();
       var winnerA      = sheet.getRange('B2').getValue();
       var runnerUpA    = sheet.getRange('B3').getValue();
       var guessWinnerA = sheet.getRange('B10').getValue();




      for (var i=0; i < groupAvalues.length; i++) {
      var winnerGroupA = groupAvalues[i];
    if(winnerGroupA == guessWinnerA){
      setPoints('o2', '2');
    }
   }

  } 

    function setPoints(rangeName, value){
     SpreadsheetApp.getActiveSheet().getRange(rangeName).setValue(value)

}

请指导我实现目标的正确方法。

1 个答案:

答案 0 :(得分:0)

这看起来像一个逻辑问题。请查看您分配给groupA的内容。如果我将获得亚军和获胜者分配给groupA(因为设计了世界杯),我会得到相同的结果。换句话说,仅当您将获胜者分配给groupA时,此功能才有效。

请注意此行var winnerGroupA = groupAvalues[i];。因为您正在遍历所有groupA并将每个值分配给winnerGroupA。你基本上是说每个人都赢了。

这是我为你工作的一个例子。

function groupAA() 
{

  var ss           = SpreadsheetApp.getActiveSpreadsheet();
  var sheet        = ss.getActiveSheet();
  var groupA       = ss.getRangeByName("groupA");
  var winners = ss.getRangeByName("winners");
  var guesses = ss.getRangeByName("guesses");
  var guessesAvalues = guesses.getValues();
  var groupAvalues = groupA.getValues();
  var winnersAvalues = winners.getValues();
  var winnerA      = sheet.getRange('B2').getValue();
  var runnerUpA    = sheet.getRange('B3').getValue();
  var guessWinnerA = sheet.getRange('B10').getValue();

  setPoints('o2', '0');
  for (var i =0; i< guessesAvalues.length; i++)
  {


    for (var j=0; j < winnersAvalues.length; j++) {

      if((winnersAvalues[j].toString() == guessesAvalues[i].toString())&&(winnersAvalues[j]!=''&&winnersAvalues[j]!=null))
      {

        var currentRange =  SpreadsheetApp.getActiveSheet().getRange('o2');        
        setPoints('o2', currentRange.getCell(1,1).getValue()+Number(2));

      }
    }
  }
} 

function setPoints(rangeName, value){
  Logger.log(value);
  SpreadsheetApp.getActiveSheet().getRange(rangeName).setValue(value);

}

function onEdit(){
  groupAA();
}

所以我创造了一系列获胜者和猜测范围(其长度是任意的)。看下面的图片看电子表格布局(我不知道墨西哥是否还没赢,所以不要告诉我):

enter image description here

您会注意到我在前面添加了分数初始化为0。我也转换为字符串,但你可能不必这样做。然后检查以确保其中一个获胜队伍不是空白,如果所有这些都通过,我会在你表达兴趣时将分数增加2。您还会注意到我添加了onEdit()来调用groupAA(),以便在您添加猜测时自动神奇地更新,这样您就可以看到让它们变得正确,完全错误,并且正确的结果。以下是一个失败猜测的例子:

enter image description here