添加脚本后撤消功能不起作用

问题描述 投票:0回答:1

我有一个脚本来隐藏或显示具有特定值的行,它运行良好,只是我有问题,如果我确实更改电子表格中任何单元格的值,即使在其他工作表(如(sheet2))中,我想撤消那个改变,撤销能力直到我重复超过 30 次才起作用!如果我删除脚本,它就可以正常工作。

我是否需要添加、更改或删除此脚本的任何代码才能使撤消能力像添加脚本之前一样正常工作?

谢谢你

我尝试更改此行:

var ss = SpreadsheetApp.getActiveSpreadsheet();
让撤消正常工作 或者让它至少在特定的工作表中产生影响,但我不能。

这是完整的脚本...

function myShowHide() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("sheet1");
  var lastRow = sheet.getLastRow();

  for (i = 4; i <= lastRow; i++) {
    var status = sheet.getRange("J" + i).getValues();

    if (status == "X") {
      sheet.showRows(i);
    }
  }

  var sheet = ss.getSheetByName("sheet1");
  var lastRow = sheet.getLastRow();

  for (i = 4; i <= lastRow; i++) {
    var status = sheet.getRange("J" + i).getValues();

    if (status != "X") {
      sheet.hideRows(i);
    }
  }
}
google-sheets google-apps-script undo
1个回答
0
投票

假设您使用可安装的 onEdit() 触发器来运行它,那么这将解决与其他工作表交互的问题。

function myShowHide(e) {
  var sh=e.range.getSheet();
  var rg=sh.getRange(4,10,sh.getLastRow(),1);
  var sA=rg.getValues();
  for(var i=0;i<sA.length;i++) {
    if(sA[i][0]=="X") {
      sh.showRows(i+4);
    }else{
      sh.hideRows(i+4);
    }
  }
}

我为此功能设置了一个可安装的 onEdit 触发器。

function myNewShowHide(e) {
  var sh=e.range.getSheet();
  if(sh.getName()!="Sheet1")return;
  myShowHide(e);
}

但是解决 Sheet1 上的问题取决于您希望工作表如何运行。 如果您使用编辑触发器运行它,那么无论何时您在工作表上的任何位置进行编辑,它都会运行。 您可以限制编辑范围,但这需要知道您想对工作表做什么,而我不知道。

我的建议是不要使用 onEdit() 触发器运行此类函数。 这个运行速度会快得多,因为我一次获取所有数据,但行仍然一次显示或隐藏一个。

© www.soinside.com 2019 - 2024. All rights reserved.