因此,我一直在尝试构建AADD(范围,范围)功能。它还不完整,所以不要为此而生气。目前令我困扰的是,脚本编辑器在有意义的代码中所说的内容与将要运行的Google表格似乎有所不同。
首先是测试人员:
function test_AADD() {
var sheet = SpreadsheetApp.getActiveSheet();
var range1 = sheet.getRange("B2:E2");
var range2 = sheet.getRange("B3:D3");
var result = AADD(range1, range2);
}
故意将范围的长度不匹配,因为我试图找出如何发送回标准错误消息,例如“ #ERROR!”。 (那里的一些帮助也会有所帮助。)
这是公共的AADD功能。我希望有一天能找到如何使函数私有化(另一件事我需要帮助。)
/**
* Adds two arrays
*
* @param {Range} range1 The first parameter
* @param {Range} range2 The second paramter
* @return {Range}
* @customfunction
*/
function AADD(range1, range2) {
return fnAADDrr(range1, range2);
}
实现AADD代码的(最终)私有函数(相信我,这是疯狂的意义)
function fnAADDrr(range1, range2) {
var r1len = range1.getNumRows() * range1.getNumColumns();
var r2len = range2.getNumRows() * range2.getNumColumns();
if (r1len !== r2len) {
return new Error("#ERROR!");
}
}
到目前为止,该函数的作用还很强,因为我只是想尝试如何测试一个范围比另一个项目少的Range。
因此,现在我们要解决主要问题:有了脚本后,脚本编辑器就不会抱怨传入的Range变量range1和range2的方法调用。而且,当我在脚本编辑器中运行test_AADD函数时,我得到的响应基本上是合理的(除了“ new Error”一词实际上并未返回-我需要其他帮助。)
因此,我又回到了我的Google表格文件。在单元格中输入
=AADD(B2:D2,B3:D3)
现在,这甚至不会触发“新错误”位,因为范围的大小相同。即使这样,我也会收到“ #ERROR!”如果我用鼠标悬停在它上面,将会得到
TypeError: Cannot find function getNumRows in object 1,2,3 (line 73)
其中1,2,3是B2:D2中的内容,第73行是脚本文件中的位置。
那么脚本编辑器和Google表格为什么不能就允许的内容达成共识?