调试 Google 表格自定义函数
Debugging a Google Sheets Custom Function
我在谷歌表格中定义了以下自定义函数:
/**
* Finds the maximum value in one column
* by comparing cells matched in another column,
* using a comma-delimited lookup in a cell.
*
* @param {string} references Comma-delimited string referencing values.
* @param {array} keys Array of strings to match.
* @param {array} values Array of values to compare.
* @return The maximum value of all referenced values.
* @customfunction
*/
function MAX_LOOKUP(references,keys,values){
if (!references || !keys || !values) return "";
var refs = {};
references.split(/, ?/).forEach(function(key){ refs[key]=1 });
var val,max = -Infinity;
for (var i=keys.length;i--;){
if (refs[keys[i]] && (val=values[i])>max) max=val;
}
return max>-Infinity ? max : "";
}
在电子表格中(与=MAX_LOOKUP(G9,A:A,I:I)
类似),这始终返回一个空字符串。但是,当我在脚本编辑器中测试它时,它可以正常工作:
function test_MAX_LOOKUP(){
var result = MAX_LOOKUP(
"foo, bar, baz",
["no", "bar", "no", "baz", "foo", "no"],
[ 99, 42, 99, 17, 1, 99 ]
);
Logger.log( result ); // Is correctly 42
}
显然,我从电子表格和测试中获得的值之间存在一些差异,但是我如何找出问题所在?如果我在函数中设置断点,则仅在从脚本编辑器进行调试时发生断点。如果我在函数中放置Logger.log
调用,则仅在我从脚本编辑器运行时记录它们。
如何查看哪些值被传递给我的函数函数?
若要查看传递的内容,请使用"print"样式调试,方法是从函数返回字符串。例如:
function MAX_LOOKUP(references,keys,values){
return JSON.stringify(references);
//return JSON.stringify(keys);
//return JSON.stringify(values);
}
这很麻烦,但您可以在编辑函数以更改返回的内容、保存脚本以及查看电子表格以查看调试答案之间来回切换。(提示:在单独的窗口中打开电子表格和脚本编辑器,而不是在单独的选项卡中打开。
使用上述技术,我们可以看到上述脚本的问题在于像A:A
这样的列范围为每一行返回单值数组,而不是单元格的值。脚本需要更改为:
if (refs[keys[i][0]] && (val=values[i][0])>max) max=val;
相关文章:
- 自定义函数中的光标位置
- Google Sheet自定义函数返回0
- 其中是自定义函数中的属性
- 创建自定义函数以在函数上运行完整的多选下拉列表
- Google Sheets自定义函数条件格式
- dalek回调或自定义函数
- UI网格:如何从自定义函数访问MODEL_COL_FIELD
- 评估作为参数传递给 Google 电子表格中自定义函数的条件
- 具有自定义函数调用的 HTML 表单
- 使用 jQuery 对动态创建的元素调用自定义函数
- 从自定义函数返回promise
- extjs-使用传递的参数创建自定义函数
- AngularJS DI用于自定义函数
- Javascript 自定义函数错误
- 如何使用Angular 1.5组件将属性求值为字符串,这是一个自定义函数
- 什么是谷歌应用脚本(自定义电子表格函数)示例中的“input.map”
- 调试 Google 表格自定义函数
- Google 表格自定义函数的多个数组输入,可将一个数组除以另一个数组
- Javascript自定义函数,用于将JSON格式的YQL查询响应导入谷歌电子表格
- 从Google电子表格自定义函数进行的Ajax调用