google-apps-script - 如何使 onEdit(e) 在受保护的工作表上运行?Google Apps 脚本
问题描述
我有一个代码:
function onEdit(e){
if (e.range.columnStart != 7 && e.range.columnStart != 8 || e.value <= 0) return;
let d = new Date();
if (e.range.columnStart == 7 && e.value == null){
e.range.offset(0,-2).setValue(null);}
else if (e.range.columnStart == 7 && e.value != null) {
e.range.offset(0,-2).setValue(d);}
else if (e.range.columnStart == 8 && e.value != null) {
e.range.offset(0,-3).setValue(d);}
}
function Lock(){
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var protection = sh.protect().setDescription('Lock');
var me = Session.getEffectiveUser();
protection.addEditor(me).setUnprotectedRanges(sh.getRange("I2:I").createTextFinder("^(?!Done).*$").matchEntireCell(true).useRegularExpression(true).findAll().map(r => r.offset(0, -3, 1, 3)));
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()){
protection.setDomainEdit(false);}
}
- 运行2个功能后。我在第 7 列或第 8 列进行编辑,将当前日期放在指定的单元格中(工作表中的第 5 列),如果
I2:I
有值,将锁定范围Done
。 - 一切都与所有者配合得很好。但是被授权编辑电子表格的协作者不能,
onEdit(e)
也不能运行(错误:您正在尝试编辑受保护的单元格或对象。如果您需要编辑,请联系电子表格所有者以禁用保护)。因为函数Lock()
保护了工作表,只留下那些I2:I
没有column 的单元格done
。 - 有什么解决办法吗?谢谢!
解决方案
我认为在您的情况下,使用简单触发器可能是您的问题的原因。那么,下面的修改呢?在此修改中,函数名称由 更改onEdit
为installedOnEdit
,可安装的 OnEdit 触发器安装到重命名的函数中。
从:
function onEdit(e){
到:
function installedOnEdit(e){
另外,请将 OnEdit 触发器安装到函数installedOnEdit
中。并且,请再次测试。
参考:
推荐阅读
- python - Kivy 自定义小部件行为
- r - Plotly 图在 Rstudio Graph 窗口和破折号应用程序(Choroplethmapbox)中的显示不一样
- c# - 跨站点脚本:验证不佳 - 强化问题(c#)
- angular - 可重复使用的 MAT-TABLE 下拉过滤器不起作用
- java - 在 QuarkusTest 中使用 LambdaClient.invoke 如何提供自定义标头?
- php - 不推荐使用 __call() 时如何覆盖我的 SOAP 请求?
- c# - 在 C# windows 窗体中出现打印问题
- linux - 在 windows 和 linux 上运行的程序
- python - 为每个 x 值找到 y 的最大值,并用一条线连接这些点
- laravel - Laravel Eloquent 中的急切加载