如何在Google Spreadsheet脚本中测试范围参数的类型?

时间:2012-08-22 16:38:57

标签: javascript google-apps-script google-sheets

我刚开始修补Google Spreadsheet的脚本,我遇到了一个问题:

如何测试函数参数的类型是否是一系列单元格?

我想做这样的事情:

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

来自Google的示例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
} 

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

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

2 个答案:

答案 0 :(得分:6)

一系列单元格只是一个数组(多维数组) Javascript有这样的问题。数组被视为一个对象。 因此,首先检查您是否具有“对象”类型,然后您可以像这样进行测试。

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

通过测试默认属性,您可以确定您有一个数组

答案 1 :(得分:1)

范围可以代表单个单元格(例如'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,这就是我们想要的。