在我的一张工作表中,我使用一个简单的脚本来更改每次编辑中某些单元格的边框。
有点像这样:
function onEdit(e) {
...
sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).setBorder(null, null, null, null, false, false);
sheet.getRangeList(rangeList).setBorder(null, null, true, null, false, false, "#BBDEFB", SpreadsheetApp.BorderStyle.SOLID_THICK);
}
}
一切正常,但是,编辑完某些内容后,可以说我按CMD + Z(或CTRL + Z)撤消了我的上一个动作。实际发生的是删除了添加的边框,因为从技术上讲这是最后的操作。
对于这种性质的问题是否存在众所周知的解决方案?
编辑: 我根据第一个答案创建了一个手动触发功能。但是,Google表格的限制是每个电子表格每个用户一个触发器。因此边界仅更改了一次。我也删除了触发器,因为它是这样说的,即使那样也没有用。
此外,还有更好的方法吗?将每次编辑的边框设置为null基本上根本不可能添加自定义边框。
答案 0 :(得分:2)
如果我的理解是正确的,该解决方法如何?请将此视为几种解决方法之一。
从外部修改电子表格时,即使按下CMD + Z(或CTRL + Z)键,也无法取消修改的动作。在这种解决方法中,我使用了此方法。
在使用此脚本之前,请安装sample()
的功能作为OnEdit事件触发器。这样,在编辑单元格时,sample()
的功能会自动跑。您可以在here上查看如何安装触发器。
function sample(e) {
if (e.source.getActiveSheet().getSheetName() == "Sheet1") {
var sheet = SpreadsheetApp.openById(e.source.getId()).getSheetByName("Sheet1"); // Modified
var values = sheet.getRange(3, 3, sheet.getLastRow() - 1, 1).getValues();
var rangeList = values.reduce(function(ar, e, i) {
if (i > 0 && (values[i - 1][0] != e[0] && e[0] != "")) {
ar.push("A" + (i + 2) + ":P" + (i + 2));
}
return ar;
}, [])
rangeList.push(sheet.getRange(sheet.getLastRow(), 1, 1, sheet.getLastColumn()).getA1Notation());
sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).setBorder(null, null, null, null, false, false);
sheet.getRangeList(rangeList).setBorder(null, null, true, null, false, false, "black", SpreadsheetApp.BorderStyle.SOLID_THICK);
}
}
onEdit(e)
的功能重命名为onEdit_sample(e)
之类的其他名称。由于脚本中包含onEdit()
,因此将同时运行安装为OnEdit触发器的sample()
和onEdit()
。请注意这一点。如果我误解了你的问题,我表示歉意。
根据您的其他要求,我添加了一个示例脚本,用于为sample()
的功能安装OnEdit事件触发器。
var id = SpreadsheetApp.getActiveSpreadsheet().getId();
ScriptApp.newTrigger("sample").forSpreadsheet(id).onEdit().create();
答案 1 :(得分:1)
如果不需要即时更改格式,可以尝试设置基于时间的触发器programatically,每隔X分钟运行一次。
创建自定义的“工作表”菜单选项以打开或关闭此自动监视可能很有趣。