使用sheet.getLastRow()的奇怪行为

时间:2016-02-27 19:16:51

标签: google-apps-script

我确实有一个包含2个标题的电子表格,我想对其进行排序。为了实现这个目的,我曾经有过这个代码,它起作用了:

var AbrechnungsDatei = SpreadsheetApp.openById(DeletionList[i]["DateiID"]);
var Abrechnungsblatt = AbrechnungsDatei.setActiveSheet(AbrechnungsDatei.getSheets()[0]);

var DataRange = Abrechnungsblatt.getRange(this.StartRowAbrechnungsblatt, 1, AbrechnungsDatei.getLastRow(), AbrechnungsDatei.getLastColumn());
DataRange.sort(this.AB_ColumnDatum);

直到几个月前一直有效。现在为了让它工作,我必须为最后一行减去1(AbrechnungsDatei.getLastRow() - 1)。否则,当我尝试使用此DataRange执行某些操作时,我收到服务错误。 对我来说似乎很奇怪的是,列不会出现这个问题,尽管情况完全相同。

你可以给我一个提示吗?有没有更好的方法来做同样的事情?我知道有一个函数可以将整个工作表作为范围(getDataRange)。但我不想包括标题行。

感谢您的帮助。

祝你好运

亨氏

1 个答案:

答案 0 :(得分:1)

您在电子表格对象上使用getLastRow()方法。

AbrechnungsDatei.getLastRow()

AbrechnungsDatei是电子表格,而非工作表标签。

即使getLastRow()方法可用于Spreadsheet对象,我也绝不会在Spreadsheet对象上使用它。我只在Sheet对象上使用getLastRow()方法。

Abrechnungsblatt.getLastRow()

我要将Abrechnungsblatt更改为sh作为工作表的缩写。

目前:

var DataRange = Abrechnungsblatt.getRange(this.StartRowAbrechnungsblatt, 1, AbrechnungsDatei.getLastRow(), AbrechnungsDatei.getLastColumn());

会将其更改为:

var DataRange = sh.getRange(2, 1, sh.getLastRow(), sh.getLastColumn());

如果您不想包含标题行,并且标题行始终是相同的行,那么您可以将getRange()方法中的起始行设置为标题行之外的一行:

getRange(start Row, start Column, Number of Rows, Number of Columns)

从电子表格中的行长度中减去标题行数。 sh.getLastRow() - number of header rows。否则,您可能在数组末尾有空白数据。