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)
)
- 在第一种情况下,如预期的那样,所有计算都正常
- 然而,在第二种情况下,它有时会产生空白结果。
仅在场景 #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(",")];
});
}
我的简单(正如我最初认为的那样)Google Apps 脚本函数没有按预期工作,因为它根据给定的输入产生不同的结果 = 它是 return 生成的数字(由逗号)从 START 到 END - 根据附图在 [J 列] 中调用。
当使用 sheet(单元格内容)中的两个参数(起始编号和结束编号)调用自定义函数时,如果出现以下情况,它会产生不同的结果:
场景 #1:参数在公式中是静态的 - 例如:=FillNums(5,12)
场景 #2:参数在公式中是动态的(例如指向单元格 A2 和 B2:=FillNums(A2,B2)
)
- 在第一种情况下,如预期的那样,所有计算都正常
- 然而,在第二种情况下,它有时会产生空白结果。
仅在场景 #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(",")];
});
}