9

Googleスプレッドシートのスクリプトをいじり始めたところですが、問題があります。

関数のパラメーターのタイプがセルの範囲であるかどうかをテストするにはどうすればよいですか?

私はこのようなことをしたいです:

if(typeof intput != "range") {
  throw "input must be a range";
}

ここにあるGoogleの例から(ページの中央):

if (typeof inNum != "number") {  // check to make sure input is a number
  throw "input must be a number";  // throw an exception with the error message
} 

したがって、これは変数の型をテストする正しい方法のようです。しかし、タイプがセルの範囲であるかどうかをテストする方法がわかりません。

範囲が1次元か2次元かを指定できればさらに良いでしょう。

4

2 に答える 2

7

セルの範囲は単なる配列(多次元配列)です。Javascriptにはそのような問題があります。配列はオブジェクトと見なされます。したがって、最初に「オブジェクト」タイプがあるかどうかを確認してから、このようにテストできます。

if(typeof intput=="object"&&intput.length!=undefined) {
  //input is a array
}else{
  //Not a array
}

デフォルトのプロパティをテストすることで、配列があることを確認できます

于 2012-08-22T17:25:41.057 に答える
2

範囲は、単一のセル(eg 'A1')またはセルのグループ(eg)を表す場合があり'A1:A2'ます。

範囲は、カスタム関数パラメーター(eg)として渡されるときに範囲値に変換されます=processRangeVal(A1:A2)

範囲が単一のセルの場合、範囲の値は単にそのセルのデータです。

範囲がセルのグループである場合、範囲の値は2次元配列です。最初のディメンションは行で、2番目のディメンションは各行の列です。

セルとセルのグループを表す範囲値をテストするには、次のようにします。

function processRangeVal(rangeVal) {
  if (Array.isArray(rangeVal[0])) {
    // do 2d-array handling
  } else {
    // do cell data handling
  }
} 

rangeVal[0]undefined範囲が単一のセルであり、セルデータがインデックス付けをサポートしていない場合に解決されます。この場合Array.isArray(undefined)、falseに解決されます。これは私たちが望むものです。

于 2019-06-10T02:38:07.763 に答える