google-apps-script - 添加脚本后撤消功能不起作用
问题描述
我有一个脚本来隐藏或显示具有特定值的行,它运行良好,只是我有一个问题,如果我确实更改了电子表格中任何单元格的值,即使在其他工作表(如(sheet2)中,我想撤消那个更改,撤消功能直到我重复超过 30 次才起作用!!!如果我删除脚本,它可以正常工作。
我是否必须添加、更改或删除此脚本的任何代码才能使 Undo Ability 像添加脚本之前一样正常工作?
谢谢
我试图改变这一行:var ss = SpreadsheetApp.getActiveSpreadsheet();
让 Undo 正常工作或使其至少影响特定工作表,但我做不到。
这是完整的脚本...
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);
}
}
}
解决方案
假设您使用可安装的 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() 触发器运行这种函数。这会运行得更快,因为我一次获得所有数据,但行仍然一次显示或隐藏一个。