使用onEdit触发器,是否可以确保用户可以看到工作表中的最后一行?

时间:2019-09-21 15:48:46

标签: google-apps-script google-sheets scroll

我有一个Google表格,每天最多可以累积100个条目。当用户添加新条目时,脚本会将新数据放入最后一行(请参见下面的代码段)。但是,屏幕上仅可见12行,因此一旦填充了这些行,用户将看不到新条目。

如何在每次输入数据时使用户看到最后一行?

我是google-apps-script的新手,因此感谢您提出任何建议。我相信onEdit触发器将不再与sheet.setActiveRange()一起使用,因此我正在寻找一种解决方法。如果没有简单的解决方案,我将采取一个笨拙的解决方案。例如,可以使用脚本来隐藏最后一行上方的行吗?

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var SHEET_NAME = 'Sheet1' // Name of current sheet
    var sheet = ss.getSheetByName(SHEET_NAME);
    var dataCell = sheet.getRange('A1');
    var lastRowNumber = sheet.getDataRange().getNumRows();
    var newData = dataCell.getValue().split(",");
    var lastRow = ss.getLastRow();

    sheet.appendRow(newData);

2 个答案:

答案 0 :(得分:1)

找到了一个解决方案:setActiveRange(lastRow + 2,lastColumn)。向下滚动足够远,而无需获取附加行的范围。额外的优势是它可以在添加行之前滚动,因此用户可以看到输入的数据。

function onEdit(e) { // Puts csv user data into Sheet1
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var SHEET_NAME = 'Sheet1' // Name of current sheet
    var sheet = ss.getSheets()[0];
    var dataCell = sheet.getRange('A1');
    var newData = dataCell.getValue().split(",");

     // Gets the address of the very last cell of this sheet
     var lastRow = sheet.getLastRow();
     var lastColumn = sheet.getLastColumn();

     // Scrolls to make sure user can see 2 rows below the current last cell
     var lastCell = sheet.getRange(lastRow+2, lastColumn);

    // Puts user entered data into a new row at the bottom of the spreadsheet
    sheet.appendRow(newData);
    sheet.setActiveRange(lastCell);
}

答案 1 :(得分:0)

您可以通过将1添加到最后一行并activate来获得新添加的范围:

var lastRow = ss.getLastRow();
sheet.appendRow(newData);
sheet.getRange("A" + (lastRow+1)).activate();//activate the newly appended row's A cell