我确实有一个包含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)。但我不想包括标题行。
感谢您的帮助。
祝你好运
亨氏
答案 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
。否则,您可能在数组末尾有空白数据。