首页 文章

如何以编程方式(带触发器)active()修复此错误在Google表格中最后占用的行?

提问于
浏览
2

你有一张几百行长的纸 . 你可以到这里去最后一行并开始你的工作:

1)打开电子表格后,执行Ctrl End; Ctrl leftArrow; Ctrl upArrow这将带您到A列中最后一个被占用的行单元格2)关闭电子表格之前,选择A列中最后一个被占用的单元格并为其指定范围名称endRow然后在打开电子表格时执行编辑>命名范围然后单击endRow这将带您到A列中最后一个被占用的行单元格;

我只是找到了一种以编程方式实现它的方法,它非常简单,但只在oldspreadsheet中使用 . 我只是将这一行放在 onOpen() 触发器内,并且工作正常: activeSheet.getRange(activeSheet.getLastRow(), 1).activate(); . 但它在新的Google表格(一个有几千行的新表格)中不起作用 . 所以,我尝试了Zig的建议,写下这个函数:

function goToLastRow() {
  var s = SpreadsheetApp.getActiveSpreadsheet();
  var range = s.getRange(s.getLastRow()+1, 1);
  range.activate();
 }

并手动设置触发器( Script Editor>>Resources>>Triggers from this project>>Ad new trigger ) . 但它仍然没有奏效 .

有什么建议吗?

3 回答

  • 4

    我找到了这种方法来完成你所需要的:

    function onOpen() { var sheet = SpreadsheetApp.getActiveSheet(); sheet.hideRows(1,sheet.getLastRow()); }

    这会隐藏包含活动工作表中数据的所有行,将光标放在下一个(空)行上,这样您就可以开始输入了 .
    完成行后,只需单击隐藏行左侧的小三角形,如果需要,它们将重新出现 .
    如果多个人同时输入新行,可能会导致问题 .

    ★这是在没有任何脚本的情况下实现此目的的另一种很酷的方式,甚至可以与同时用户一起工作(如果另一个人打开具有编辑权限的电子表格,则上面的脚本版本可以隐藏正在输入的行 . )

    只有当您的数据具有一组具有固定值(¹)的列时,此第二个无脚本解决方案才有效,例如,只有可能值为'pending','doing'和'done'的列 . 所以找到这样的列,我假设它在本例中的'A'列上 .

    ➮让我们在"Data"菜单中使用"Filter Views"(仅在新的工作表版本中 . )
    此功能允许只有应用它们的用户才能看到的个性化过滤器 . 创建一个名为"Enter new rows mode"的筛选视图,没有为列'A'选中值(在下拉列筛选器菜单时单击筛选:"clear") .

    ➮现在,当您进入电子表格时,将自动应用过滤后的视图,并且所有包含数据的行都将消失 .
    开始输入 . 如果其他用户开始输入新行,那么只有你的行才会消失,直到你刷新浏览器窗口为止 .

    ➮如果其他用户删除了已过滤的视图,则仅为其删除,而不是为您删除 .

    您也可以使用"old"过滤器执行类似操作,但它与针对多个用户的脚本解决方案具有相同的缺点 .

    *¹需要一组固定的值,因为电子表格过滤器会自动在视图中添加新项目 . 您无法使用日期列,因为您将始终获得新的未来值 .
    要配置过滤器,您需要每个可能的值至少有一行,以便您可以在列过滤器中取消选中它们 .
    如果稍后输入新值,则需要编辑视图以取消选中它 .

  • 0

    我只是找到了方法,它真的非常简单,只需将此行放在 onOpen() 触发器内,就可以正常工作: activeSheet.getRange(activeSheet.getLastRow(), 1).activate(); . 但它在新的Google表格中无效 . 所以,我尝试了Zig的建议,写下这个函数:

    function goToLastRow() {
      var s = SpreadsheetApp.getActiveSpreadsheet();
      var range = s.getRange(s.getLastRow()+1, 1);
      range.activate();
     }
    

    并手动设置触发器( Script Editor>>Resources>>Triggers from this project>>Ad new trigger ) .

    有什么建议吗?

  • 0

    getActiveSpreadsheet 更改为 getActiveSheet . 电子表格是所有文件,工作表只是一张工作表:P . 但是你会发现你无法在 onOpen 触发器中转到电子表格的任何部分 .

    最好的方法是为此创建一个菜单 .

    最后代码如下:

    function onOpen() //the same to create a onOpen trigger
    {
      SpreadsheetApp.getUi().createMenu("Go to").addItem("Last Row", "goToLastRow").addToUi();
    }
    
    function goToLastRow() {
      var s = SpreadsheetApp.getActiveSheet();
      Logger.log(s.getLastRow());
      var range = s.getRange(s.getLastRow()+1, 1);
      range.activate();
    }
    

相关问题