如何在谷歌电子表格脚本中测试范围参数的类型
How to test type of range parameter in Google Spreadsheet script?
我刚开始修改谷歌电子表格的脚本,我遇到了一个问题:
如何测试函数参数的类型是否为一系列单元格?
我想做这样的事情:
if(typeof intput != "range") {
throw "input must be a range";
}
从谷歌的例子这里(页面中间):
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
}
因此,这似乎是测试变量类型的正确方法。但我不知道如何测试这种类型是否是一系列细胞。
如果我能指定范围是一维还是二维,那就更好了。
单元格范围只是一个数组(多维数组)Javascript在这方面存在问题。数组被视为一个对象。所以,首先检查你是否有"对象"类型,然后你就可以这样测试了。
if(typeof intput=="object"&&intput.length!=undefined) {
//input is a array
}else{
//Not a array
}
通过测试默认属性,您可以确定您有一个数组
范围可以表示单个小区(例如'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,这正是我们想要的。
我知道这篇文章很老,但我有一个解决方案。
首先你需要知道这些:
- getCell()是一个范围对象方法
- isSheetHidden()是工作表方法
- getSpreadsheetTme()是一个电子表格方法
现在我们将利用它:
所有特定对象类型的首次写入扩展方法:
Object.prototype.isRange = function () { return this.getCell !== undefined }
Object.prototype.isSheet = function () { return this.isSheetHidden != undefined }
Object.prototype.isSpreadsheet = function () { return this.getSpreadsheetTheme != undefined }
现在你可以测试:
function myFunction() {
let ss = SpreadsheetApp.getActiveSpreadsheet()
let sheet = ss.getSheetByName("FOOD_DB")
let range = sheet.getActiveRange()
Logger.log("range.isRange(): " + range.isRange()) //TRUE
Logger.log("range.isSheet(): " + range.isSheet()) //false
Logger.log("range.isSpreadsheet(): " + range.isSpreadsheet()) //false
Logger.log("sheet.isRange(): " + sheet.isRange()) //false
Logger.log("sheet.isSheet(): " + sheet.isSheet()) //TRUE
Logger.log("sheet.isSpreadsheet(): " + sheet.isSpreadsheet()) //false
Logger.log("ss.isRange(): " + ss.isRange()) //false
Logger.log("ss.isSheet(): " + ss.isSheet()) //false
Logger.log("ss.isSpreadsheet(): " + ss.isSpreadsheet()) //TRUE
}
相关文章:
- 如何在Jasmine/Rect中测试带有范围输入的“onChange”事件
- 如何测试只在闭包范围中可见的javascript方法
- 如何在谷歌电子表格脚本中测试范围参数的类型
- 将范围添加到角度种子默认视图控制器时,测试套件现在失败
- 使用 的 Reg Ex 测试号码范围
- 因果报应测试中未定义的预期范围变量
- mocking和测试指令,隔离范围包含ng模型
- 角度单元测试:如何在没有范围的情况下测试控制器属性
- 具有默认范围的指令的单元测试
- 带有模板URL和隔离范围的角度测试指令
- 摩卡测试共享状态,因为范围不好
- 茉莉花测试骨干,范围问题
- 使用 Jasmine 在角度范围内测试 JavaScript 函数
- 将因果报应范围添加到灰烬测试中
- 在Jasmine测试中访问控制器的范围
- Karma-测试函数没有返回,也没有设置范围变量
- 可变范围和qUnit测试
- 如何在AngularJS中对隔离范围指令进行单元测试
- 美元的范围.单元测试期间控制器中未定义的$on
- 在测试期间更改了单向绑定指令属性,没有更新指令范围