【问题标题】:getRange(string) works but getRange(number) fails [duplicate]getRange(string) 有效,但 getRange(number) 失败 [重复]
【发布时间】:2020-09-25 17:12:58
【问题描述】:

下面是没有解释的代码,我稍后会添加,因为 SO 不喜欢某些东西。我将继续添加到这部分,直到它满意为止,然后再粘贴到实际中。基本上只是寻找评论行'有效'和'失败'......实际上,我终于在下面添加了一条评论,因为SO似乎不喜欢它在正文中......对不起......

 /*
 * Sends emails with data from the current spreadsheet.
 */
function sendEmails() {
  //var sheet = SpreadsheetApp.getActiveSheet();
  var fred = "test";
  var sheet = SpreadsheetApp.openById("18ewaD4ruwR5apY4eEFRlO9m2WfgsgwrEgtfEAPqqAeM");
  var startRow = 2; // First row of data to process
  var numRows = 2; // Number of rows to process
  // Fetch the range of cells A2:B3

  //works... var dataRange = sheet.getRange("A2:B3");
  //fails... var dataRange = sheet.getRange(startRow, 1, numRows, 2);
  var dataRange = sheet.getRange(startRow, 1, numRows, 2);

  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  
  
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i in data) {
    var row = data[i];
    var emailAddress = row[0]; // First column
    var message = row[1]; // Second column
    var subject = 'Sending emails from a Spreadsheet';
    MailApp.sendEmail(emailAddress, subject, message);
  }
}

一行(标记)有效,另一行(标记)失败并出现错误:

异常:参数(字符串、数字、数字、数字)与 SpreadsheetApp.Spreadsheet.getRange 的方法签名不匹配。 (第 14 行,文件“代码”)

失败的那个来自样本,所以不确定它为什么失败......电子表格包含 3 行:#1 2 列的标题 #2 firstemail@gmail.com #3 secondemail@gmail.com

【问题讨论】:

  • 一行(标记)有效,另一行(标记)失败并出现错误:异常:参数(字符串、数字、数字、数字)与 SpreadsheetApp.Spreadsheet.getRange 的方法签名不匹配. (第 14 行,文件“代码”)失败的那个来自样本,所以不确定它为什么失败......电子表格包含 3 行:#1 2 列的标题 #2 firstemail@gmail.com #3 secondemail@ gmail.com

标签: google-apps-script google-sheets


【解决方案1】:

问题:

SpreadsheetApp.openById("id")Spreadsheet class 的一个实例。

但是,getRange 是一种可以应用于sheet objects 的方法。

解决方案:

替换:

var sheet = SpreadsheetApp.openById("id");

具有以下任何

var sheet = SpreadsheetApp.openById("id").getSheetByName("sheetName");
var sheet = SpreadsheetApp.openById("id").getActiveSheet();
var sheet = SpreadsheetApp.openById("id").getSheets()[0]; // 0 indicates the 1st sheet

甚至是你注释掉的部分:

var sheet = SpreadsheetApp.getActiveSheet();

【讨论】:

  • 这些对我的具体问题和相关错误的回答比之前建议的相关问题要好得多。请不要删除这个,因为我希望它作为一个很好的参考。
【解决方案2】:

您可以在 Spreadsheet object 上调用 getRange(),但它需要 A1 表示法。

getRange(row, column, numRows, numColumns) 方法仅适用于 Sheet objects

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 2016-11-06
    • 2016-02-08
    • 1970-01-01
    相关资源
    最近更新 更多