9

我刚刚开始修改 Google 电子表格的脚本,但我遇到了一个问题:

如何测试函数参数的类型是否是单元格范围?

我想做这样的事情:

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

从谷歌的例子here(页面中间):

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
} 

所以这似乎是测试变量类型的正确方法。但我不知道如何测试类型是否是一系列单元格。

如果我可以指定范围是一维还是二维,那就更好了。

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

范围可以表示单个单元格(例如'A1')或一组单元格(例如'A1:A2')。

当作为自定义函数参数(例如 )传递时,范围将转换为范围值=processRangeVal(A1:A2)

如果范围是单个单元格,则范围值就是该单元格中的数据。

如果范围是一组单元格,则范围值是一个二维数组。第一个维度是行,第二个维度是每行中的列。

要测试代表一个单元格与一组单元格的范围值:

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 回答