我在第一栏中有电子邮件地址。当我尝试获取此列的最后一行时,该函数仅返回前两个值。以下是表单的链接: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);
}
难道它不会返回第一列中的所有电子邮件地址吗? 它只返回前两个电子邮件地址。
答案 0 :(得分:0)
这次修改怎么样?
getRange(2, 1).getLastRow()
表示要检索" a2"范围的最后一行。结果是2。
SpreadsheetApp.getActive().getSheetByName('Sheet1').getLastRow()
getRange(row, column, numRows)
的第3个参数是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);
答案 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行。