Google apps script Sheet.getRange在不使用A1表示法时引发签名不匹配异常

Google apps script Sheet.getRange在不使用A1表示法时引发签名不匹配异常,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在谷歌地图上写一个脚本,它将与谷歌地图的地理编码服务进行交互 下面的代码工作正常 var ss = SpreadsheetApp.getActiveSpreadsheet(); var header_v = ss.getRange("1:1").getValues(); 但是,稍后在我的函数中,我使用Sheet.getRange(number,number,number,number)方法再次调用Sheet.getRange(): var target_range = ss.getRang

我正在谷歌地图上写一个脚本,它将与谷歌地图的地理编码服务进行交互

下面的代码工作正常

var ss = SpreadsheetApp.getActiveSpreadsheet();
var header_v = ss.getRange("1:1").getValues();
但是,稍后在我的函数中,我使用
Sheet.getRange(number,number,number,number)
方法再次调用
Sheet.getRange()

var target_range = ss.getRange(1, ss.getLastColumn()+1, ss.getLastRow(), 10);
引发以下异常:

Exception: The parameters (String,number,number,number) don't match the method signature for Spreadsheet.getRange.
我试着用一个我知道是数字的变量替换第一个参数,效果也是一样的

这是当前状态下的函数

function geocode() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var header_v = ss.getRange("1:1").getValues();

  var col_indxs = {
    name : header_v[0].indexOf("restaurant_name"),
    address : header_v[0].indexOf("address")
  }

  var target_range = ss.getRange(1, ss.getLastColumn()+1, ss.getLastRow(), 10);
  Logger.log(target_range.getA1Notation());
}
我自己解决了这个问题

var ss = SpreadsheetApp.getActiveSpreadsheet();
返回
电子表格
,但是
getRange(number,number,number,number)
工作表
类的成员

var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

解决了我的问题。

getRange也是电子表格类的一种方法,但具有不同的签名。谢谢!这真是太棒了O我想知道他们究竟为什么在两个类中都保留getRange()方法,而不始终保持它们之间的同步?@Magne从文件级调用
getRange()
,与从工作表级调用相比,是一种非常不同的操作。从文件级调用
getRange()
时,必须指定工作表。如果应用程序本身随机选择一张工作表进行操作,那将是荒谬的。因此,这两个函数无法保持同步,因为它们在不同的上下文中运行。我希望谷歌方面的一个改进是在通用错误消息中添加一个指针,以帮助编码人员识别问题:这不是语法问题,而是上下文问题。