Google表格脚本getLastRow()不返回所有值

时间:2017-12-04 22:01:28

标签: google-apps-script google-sheets

我在第一栏中有电子邮件地址。当我尝试获取此列的最后一行时,该函数仅返回前两个值。以下是表单的链接:https://docs.google.com/spreadsheets/d/1piGCiWMcUKUWagIJSZ_0SxxuNG3tcEcrx-fKnMDOIlQ/edit?usp=sharing

这是脚本函数:

function myFunction() {
  var rangeLastRow = SpreadsheetApp.getActive().getSheetByName('Sheet1').getRange(2, 1).getLastRow(); 
  var emails = SpreadsheetApp.getActive().getSheetByName('Sheet1').getRange(2, 1,rangeLastRow).getValues();
  Logger.log(emails);
}

难道它不会返回第一列中的所有电子邮件地址吗? 它只返回前两个电子邮件地址。

2 个答案:

答案 0 :(得分:0)

这次修改怎么样?

修改要点:

  • getRange(2, 1).getLastRow()表示要检索" a2"范围的最后一行。结果是2。
    • 要检索工作表的最后一行,请使用SpreadsheetApp.getActive().getSheetByName('Sheet1').getLastRow()
    • getRange(row, column, numRows)的第3个参数是numRows。当您想要检索" a2:a6"的数据时,numRowsrangeLastRow - 1
      • 由于上述原因,getRange(2, 1, 2).getValues()只检索了2个单元格。
  • SpreadsheetApp.getActive().getSheetByName('Sheet1')可以通过导入变量来使用。

上面反映的修改后的脚本如下。

修改后的脚本:

var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
var rangeLastRow = sheet.getLastRow(); 
var emails = sheet.getRange(2, 1, rangeLastRow - 1).getValues();
Logger.log(emails);

参考文献:

答案 1 :(得分:0)

不,它正常工作。 range.getLastRow()返回范围的最后一行的绝对索引。你的行

var rangeLastRow = SpreadsheetApp.getActive().getSheetByName('Sheet1').getRange(2, 1).getLastRow(); 

返回您在getRange(2, 1)中指定的单元格A2的行索引,因此您对range.getValues()的调用将获取范围A2:A3的值。即,您对range.getLastRow()的调用返回2,因为您的范围是(第2行,第1列),因此您对range.getValues()的调用正在查看范围(第2行,第1列,第2行)

您需要 中的最后一行数据,这是您使用sheet.getLastRow()获得的。事实上,为什么不完全取消var rangelastRow?以下内容为您提供了以下结果:

function myFunction() {
  var ss = SpreadsheetApp.getActive().getSheetByName('Sheet1');
  var emails = SpreadsheetApp.getActive().getSheetByName('Sheet1').getRange(2, 1,ss.getLastRow() - 1).getValues();
  Logger.log(emails);
}

请注意,您实际上希望在设置范围内的行数时使用getLastRow() - 1,因为您的范围从第2行开始,而不是第1行。