google-apps-script - Google 表格脚本:TypeError:getValues 不是函数
问题描述
我创建了一个 vlookup 函数来检索命名范围中的值,因为它是在工作表中使用起来相当复杂的方程式的一部分。它的结构与本机 VLOOKUP 相同,但我只将它用于命名范围。
运行测试时出现“TypeError:range.getValues 不是函数”,但无法确定原因。任何意见,将不胜感激。MTIA
function c_test(){
var result = c_VLookup(25, "Foil_Cant_Values", 2);
Logger.log("c_VLookup returned: " + result);
}
function c_VLookup(searchKey, NamedRange, index) {
// Author: Max Hugen
// Date: 20102-11-21
// Purpose: Script version of sheets VLOOKUP(search_key, range, index)
var range = c_GetRangeByName(NamedRange);
if (!range) {
Logger.log("c_VLookup didn't return a range.");
return;
}
Logger.log("c_VLookup range: " + range);
//Logger returned: c_VLookup range: A160:E162
//TypeError: range.getValues is not a function (line 26, file "Utils")
var data = range.getValues();
var resultRow = data.filter( function(row) { row[1] = searchKey; });
var result = resultRow[index];
return result;
}
function c_GetRangeByName(NamedRange) {
SpreadsheetApp.getActiveSpreadsheet().getRangeByName(NamedRange).getA1Notation();
}
解决方案
在您的脚本中c_GetRangeByName
,getA1Notation()
使用了 , 并且不返回任何值。我认为这是您的问题的原因。所以请修改如下。
修改后的脚本:
function c_GetRangeByName(NamedRange) {
return SpreadsheetApp.getActiveSpreadsheet().getRangeByName(NamedRange);
}
此外,您filter
需要进行如下修改。
var resultRow = data.filter( function(row) { return row[1] == searchKey; });
笔记:
- 如果要查看 A1Notation at
Logger.log("c_VLookup range: " + range);
,请将其修改为Logger.log("c_VLookup range: " + range.getA1Notation());
- 作为附加信息,在您的脚本中,当单元格“B160:B162”的值为 时
25
,将返回第 162 行的值。虽然我不确定您的实际情况,但请注意这一点。
参考:
推荐阅读
- python - 边缘内的颜色渐变
- reactjs - 当父组件突然卸载并且无法及时更新状态时,如何停止react-mic的记录器?
- google-cloud-platform - 如何通过 API 检索 Dialogflow 的使用指标?
- c++ - 具有不同类型的 CUDA 每线程数组
- amazon-web-services - Py4JJavaError:调用 o57.showString 时出错。: org.apache.spark.SparkException:
- apache-kafka - 如何防止我的 Kafka Streams 应用程序进入 ERROR 状态?
- sql-server - 如何在 SQL Server 中回滚一次插入 3 个表的数据
- javascript - 如何在网络应用程序上显示未知数量的图像?
- ios - 键盘出现时没有动画第一次 TextView 成为 Swift 中的第一响应者
- jquery - 如何在jquery中获取select2元素的最后一个选择或未选择的元素?