【问题标题】:Google Sheets Script getLastRow() not returning all valuesGoogle表格脚本getLastRow()不返回所有值
【发布时间】:2018-05-18 11:15:42
【问题描述】:
【问题讨论】:
标签:
google-apps-script
google-sheets
【解决方案1】:
这个修改怎么样?
修改点:
-
getRange(2, 1).getLastRow() 表示检索“a2”范围的最后一行。所以结果是2。
- 要检索表格的最后一行,请使用
SpreadsheetApp.getActive().getSheetByName('Sheet1').getLastRow()
-
getRange(row, column, numRows) 的第三个参数是numRows。当您要检索“a2:a6”的数据时,numRows 是rangeLastRow - 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);
参考资料:
【解决方案2】:
不,它工作正常。 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 行。