3

私はGoogle Appsスクリプトにかなり慣れていないので、「初めてのカスタム関数」のチュートリアルを試しているときにこの問題に遭遇しました.

=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 Apps スクリプトでの「スロー」機能の使用法を理解しようとしています。5行目と6行目で他の結果が生成されるのに対し、3行目で「入力は数値でなければならない」を生成するにはどうすればよいですか?

4

2 に答える 2

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(*)では、同じ理由で解析エラーが返されます。引数が有効ではなく、この場合は範囲​​にすることもできません... + または - を試すこともできます。何かを計算しようとしますが、できません。エラーメッセージは、関数からではなく、スプレッドシートからのものです。

有効な範囲を使用してターゲット セルの値を変更してみてください。まったく異なる結果が表示されます。たとえば、A2write=in2mm(A1) と play でA1

私が物事を(少し)より明確にしたことを願っています;-)

于 2012-08-05T16:17:48.370 に答える
0

コードでエラーを見つけた場合は、提供した3番目の例に表示されているエラーをスローできます。例として、コードは次のようになります...

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

提供した最後の2つの例では、エラーは関数によってキャッチされるのではなく、Googleスプレッドシートによってキャッチされます。

于 2012-08-05T16:01:25.150 に答える