Google Apps教程:您的第一个自定义功能

时间:2012-08-05 15:35:01

标签: google-apps-script google-sheets custom-function

我对谷歌应用程序脚本相当新,我在尝试“你的第一个自定义功能”教程时遇到了这个问题。

=in2mm(1) -> 25.4
=in2mm(2) -> 50.8
=in2mm() -> #ERROR (error: input must be a number (line 6))
=in2mm(pi()) -> 79.7964534011807
=in2mm(a) -> #NAME? (error: Unknown range name a)
=in2mm(*) -> #ERROR (error: Parse error)

我正在尝试了解Google应用脚本中“throw”功能的用法。如何在我的第3行产生“输入必须是数字”,而第5和第6行产生其他一些结果?

2 个答案:

答案 0 :(得分:2)

您可以通过添加一些这样的案例处理来使错误消息更加明确:

function in2mm(inNum) {
  // Function to convert from INCHES to MILLIMETERS
  var outNum = 0;     // this will hold the answer
  var factor = 25.4;  // multiply input by this factor to get output
    if (inNum == "") {  // check to make sure input is a number
    throw ("error: input must not be empty");  // throw an exception with the error message
    }else if (typeof inNum != "number") {  // check to make sure input is a number
    throw ("error: input must be a number (now it is a "+typeof inNum+")");  // throw an exception with the error message
}
  outNum = inNum * factor;  // calculate the answer
  return outNum;  // return the answer to the cell which has the formula
}

但是参数必须是'有效'才能由函数处理...在你的例子中=in2mm(a) a被解释为命名区域,因为你没有一个名为'a'的区域在尝试执行该函数之前发生错误。这就是为什么错误消息不是来自函数本身,而是来自电子表格下的“引擎”。

另一个例子=in2mm(*)返回一个Parse错误,原因相同,参数无效,在这种情况下它也不能是一个范围......你也可以尝试+或 - ,它会尝试计算一些东西,但它不能再次出现错误信息来自电子表格,而不是来自你的函数。

尝试使用有效范围并更改目标单元格中​​的值,您会看到完全不同的结果。例如,在A2中写=in2mm(A1)并使用A1

希望我让事情变得更清晰一些; - )

答案 1 :(得分:0)

如果您在代码中发现了错误,那么您可以抛出错误,这就是您在第三个示例中看到的错误。例如,代码看起来像......

function in2mm(inches){
  if (inches == null){ 
    throw 'input must be a number'; 
  }
}

在您提供的最后两个示例中,您的功能未捕获错误,而是被Google电子表格捕获。