简体   繁体   English

谷歌 function 返回未定义

[英]Google function returning undefined

I have an issue with a custom google script I'm making to generate a bunch of sheets with info based on other sheets.我有一个自定义谷歌脚本的问题,我正在制作一堆带有基于其他工作表的信息的工作表。 I can't figure out why this is happening..我不明白为什么会这样。。

I've tried including logs and the values before the return is correct.. however when its returned, I get the value undefined.我已经尝试在返回正确之前包含日志和值。但是当它返回时,我得到的值是未定义的。 it's regarding the function: getTournamentInfo(), called from tournamentInfo = getTournamentInfo(matchInfo[0]);这是关于 function: getTournamentInfo(), 从锦标赛信息中调用 = getTournamentInfo(matchInfo[0]);

function getTournamentInfo(abbreviation) {
  var sheet = ss.getSheetByName("Tournaments");
  var tournaments = sheet.getRange("B2:B").getValues().filter(String);
  console.log("Fetching Abbreviation: " + abbreviation);
  var r = 2;
  tournaments.forEach(function (tournament) {
    if (tournament != "")
    {
      var tInfo = sheet.getRange("B"+r+":K"+r).getValues().toString().split(",");
      if (tInfo[0] == abbreviation) {
        console.log("Returning Info for: " + tInfo[0]);
        return tInfo;
      }
    }
  });
}

function generateSheets() {
  var sheet = ss.getSheetByName("Match Schedule");
  var matches = sheet.getRange("B5:B").getValues().filter(String);

  var r = 5;
  matches.forEach(function (match) {
    if (match != "")
    {
      var matchInfo = sheet.getRange("B"+r+":L"+r).getValues().toString().split(",");
      if (matchInfo[10] == "true") // Checks wether or not to generate the sheet
      {
        console.log("Generate = " + matchInfo[10]);
        console.log("Fetching Tournament Info: " + matchInfo);
        var tournamentInfo = "";
        try {
          tournamentInfo = getTournamentInfo(matchInfo[0]);
        } catch (e) {
          console.log(e);
        }
        console.log(tournamentInfo);

        var template = "1v1PlayerTemplate"; // Default Template
        if (tournamentInfo[3] == 2) {
          template = "1v1TeamTemplate";
        } else if (tournamentInfo[3] == 3) {
          template = "XvXTeamTaplte";
        }
        var sheetName = matchInfo[0] + " | " + matchInfo[1];
        var matchSheet = ss.getSheetByName(template).copyTo(ss.getSheetByName(template).getParent()).setName(sheetName);

      }
    }
    r++;
  });
}```

Your getTournamentInfo function is not returning your result.您的getTournamentInfo function 没有返回您的结果。 Your return statement only short-circuits the function supplied in forEach .您的 return 语句只会使forEach中提供的 function 短路。 This is one of the possible solutions (untested):这是可能的解决方案之一(未经测试):

function getTournamentInfo(abbreviation) {
    var sheet = ss.getSheetByName("Tournaments");
    var tournaments = sheet.getRange("B2:B").getValues().filter(String);
    console.log("Fetching Abbreviation: " + abbreviation);
    var r = 2;
    let result; // <----
    tournaments.forEach(function (tournament) {
        if (tournament != "" && result == undefined) { // <-----
            var tInfo = sheet.getRange("B" + r + ":K" + r).getValues().toString().split(",");
            if (tInfo[0] == abbreviation) {
                console.log("Returning Info for: " + tInfo[0]);
                result = tInfo; // <----
            }
        }
    });
    return result; // <----
}

You can do it more simply with a for loop, instead of forEach :您可以使用for循环而不是forEach更简单地做到这一点:

function getTournamentInfo(abbreviation) {
    var sheet = ss.getSheetByName("Tournaments");
    var tournaments = sheet.getRange("B2:B").getValues().filter(String);
    console.log("Fetching Abbreviation: " + abbreviation);
    var r = 2;
    for (const tournament of tournaments) { // <==============
        if (tournament != "") {
            var tInfo = sheet.getRange("B" + r + ":K" + r).getValues().toString().split(",");
            if (tInfo[0] == abbreviation) {
                console.log("Returning Info for: " + tInfo[0]);
                return tInfo;
            }
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM