0

我有一个自定义公式脚本,它循环遍历选项卡名称中包含“@”的所有工作表。然后,我在其中查看一个范围以找到我正在搜索的字符串(作为参数给出)。如果我在范围内找到该字符串,我会运行一些其他代码来检查其他单元格。

这里的重要部分是在范围内找到字符串。这是我的代码。

    /**
    * Searches through the box scores and counts Goaltender Wins.
    *
    * @param {"Hollywood|Hattricks|HOL"} teamName The team to search for.
    * @param {"Z1"} dummy The cell to store random number in order to refresh values on editing the box scores.
    * @return {number} The number of times the item appears in the range(s).
    * @customfunction
    */
    function calcGoaltenderWins(username, dummy) {

      var count = 0;

      SpreadsheetApp.getActive().getSheets().forEach(function (s) {
        //regular season sheets
        if (s.getName().indexOf("@") >= 0 && s.getName().indexOf(":") === -1) {
          //if sheet is finalized
          if (s.getRange("U37").getDisplayValue() != "Live ⬤") {
            //if the home team won
            if (s.getRange("Q11").getValue() < s.getRange("Q12").getValue()) {
              //check if goaltender is on the player list for that game
              s.getRange("Y5:Y12")
              .getValues()
              .reduce(function (a, b) {
                return a.concat(b);
              })
              .forEach(function (v) {
                if (v === username) count += 1;
              });
            }
            //if the away team won
            if (s.getRange("Q12").getValue() < s.getRange("Q11").getValue()) {
              //check if goaltender is on the player list for that game
              s.getRange("D5:D12")
              .getValues()
              .reduce(function (a, b) {
                return a.concat(b);
              })
              .forEach(function (v) {
                if (v === username) count += 1;
              });
            }
          }
        }
      });
      return count;
    }

这是该表的外观以供参考。

我想弄清楚的是如何检查我正在检查的字符串是否在其左侧有一个特定值 2 个单元格。这个值应该是“G”。

例如,我使用了公式=calcGoaltenderWins("Name", dummy)。如果在 D5:D12 范围内(特别是在 D5 中)找到名称“Name”,那么它也应该只检查 B5(左侧的单元格 2)是否等于“G”,以便继续运行代码。如果它不等于“G”,那么它不应该响应它找到的字符串。

4

1 回答 1

3

尝试这个:

function calcGoaltenderWins(username, dummy) {
  var count = 0;
  const ss=SpreadsheetApp.getActive();
  const shts=ss.getSheets()
  shts.forEach(function(s) {
    if (s.getName().indexOf("@")>=0 && s.getName().indexOf(":")==-1) {
      if (s.getRange("U37").getDisplayValue()!="Live ⬤") {
        if (s.getRange("Q11").getValue() < s.getRange("Q12").getValue()) {
          s.getRange("Y5:Y12").getValues().reduce(function(a,b){return a.concat(b);}).forEach(function(v){if (v==username)count+=1;});
        }
        if(s.getRange("Q12").getValue() < s.getRange("Q11").getValue()) {
          let v=s.getRange("B5:B12").getValues();//added
          s.getRange("D5:D12").getValues().reduce(function(a,b,i) {if(v[i][0]=="G"){return a.concat(b)}else{return a;};}).forEach(function(v){if (v==username)count += 1;//edited
          });
        }
      }
    }
  });
  return count;
}
于 2020-06-13T15:58:38.807 回答