首页 > 解决方案 > 脚本编辑器接受的内容和 Google 表格接受的内容可能不同?

问题描述

所以我一直在尝试构建一个 AADD(range, range) 函数。它不完整,所以不要对我说这些。目前困扰我的是脚本编辑器在有意义的代码中所说的内容和 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 变量 range1 和 range2 的方法调用。当我在脚本编辑器中运行 test_AADD 函数时,我得到了一个非常合理的响应(除了“新错误”的东西实际上并没有返回——我需要其他帮助。)

然后我回到我的谷歌表格文件。在我输入的单元格中

=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 表格不能就允许的内容达成一致呢?

标签: google-apps-scriptgoogle-sheetscustom-function

解决方案


推荐阅读