Google 从 sheet 调用的 Apps 脚本函数 - 有时结果为空白(返回空值)

Google Apps Script function called from sheet - sometimes blank results (returned empty value)

我的简单(正如我最初认为的那样)Google Apps 脚本函数没有按预期工作,因为它根据给定的输入产生不同的结果 = 它是 return 生成的数字(由逗号)从 START 到 END - 根据附图在 [J 列] 中调用。

当使用 sheet(单元格内容)中的两个参数(起始编号和结束编号)调用自定义函数时,如果出现以下情况,它会产生不同的结果: 场景 #1:参数在公式中是静态的 - 例如:=FillNums(5,12) 场景 #2:参数在公式中是动态的(例如指向单元格 A2 和 B2:=FillNums(A2,B2)

  1. 在第一种情况下,如预期的那样,所有计算都正常
  2. 然而,在第二种情况下,它有时会产生空白结果。

仅在场景 #2 中,根据输入参数(在单元格中),我得到不同的输出:

5,21  => blank output
1,21  => 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21
2,21  => 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21
3,21  => blank output
4,19  => blank output
5,19  => blank output
6,19  => blank output
7,19  => blank output
8,19  => blank output
9,19  => blank output
5,9   => 5,6,7,8,9
10,21 => 10,11,12,13,14,15,16,17,18,19,20,21

Screenshot of the mentioned issue / Google Sheet

调试不工作,没用,花了几个小时试图解决它,发现从 sheet 调用函数时是不可能的,对于 Logger = unusable 也是如此。

函数:

function FillNums(start,end) {
  var result = ""
  var a = start
  var b = end

  for (var i = a; i <= b; i++) {
    if (i == b) {
      result = result + i
      } else {
        result = result + i + ","
        }
  }
  return result 
}

非常欢迎任何解决方案来解决此问题。该函数应该从头到尾产生所有时间的数字行。

我有时会编写脚本,但我只是这里的初学者,无法理解为什么这么简单的事情有时会产生空结果:(

Link 到包含脚本函数的示例 sheet:Google Sheet

当我看到您的脚本和示例电子表格时,我认为在您的情况下,FillNums(start,end)start,end 的值可能是字符串值。我认为这可能是您遇到问题的原因。当这反映在您的脚本中时,它会变成如下。

修改后的脚本 1:

function FillNums(start, konec) {
  var result = ""
  var a = Number(start); // Modified
  var b = Number(konec); // Modified
  var i = 0
  for (i = a; i <= b; i++) {
    if (i == b) {
      result = result + i
    } else {
      result = result + i + ","
    }
  }
  return result
}

修改脚本 2:

作为另一个示例,当使用数组时,它变成如下。

function FillNums(start, konec) {
  var a = Number(start);
  var b = Number(konec);
  var result = [];
  for (var i = a; i <= b; i++) {
    result.push(i);
  }
  return result.join(",");
}

修改脚本 3:

作为另一个示例,当使用数组时,它变成如下。在这种情况下,您可以像 =FillNums2(A2:B10).

这样使用此脚本
function FillNums2(values) {
  return values.map(([start, konec]) => {
    if (!start && !konec) return ["no data"];
    var a = Number(start);
    var b = Number(konec);
    var temp = [];
    for (var i = a; i <= b; i++) {
      temp.push(i);
    }
    return [temp.join(",")];
  });
}