google-apps-script - 当编辑的单元格更改为某个值时,谷歌脚本保护整行
问题描述
当行中的一个下拉值设置为某个值('ON HOLD')时,我一直在尝试制作一个脚本来保护一行。我最接近找到解决方案的是(使用应用程序脚本将下拉菜单更改为“锁定”时保护行)不幸的是,该解决方案不是描述性的,所以我不知道从哪里开始更改它。到目前为止,这就是我的解决方案
function onEdit(event){
var eventsheet = event.source.getActiveSheet();
var editedcell = eventsheet.getActiveCell();
var step = event.range;
var step2 = step.getRow();
Logger.log(step2);
var protectcol = 5;
if(editedcell.getColumn() == protectcol){
if(editedcell.getDisplayValue() == 'ON HOLD'){
var protectionrg = step2.protect();
protectionrg.addEditor('Email@mail.com'); //Entire Row Protect
}
}
}
我该怎么办?
解决方案
这是一个示例代码:
function onEdit(event){
var eventsheet = event.source.getActiveSheet();
var editedcell = event.range;
var rowRange = eventsheet.getRange("A"+editedcell.getRow()+":"+editedcell.getRow());
Logger.log(rowRange.getA1Notation());
var protectcol = 5;
if(editedcell.getColumn() == protectcol){
if(editedcell.getDisplayValue() == 'ON HOLD'){
var protectionrg = rowRange.protect();
protectionrg.addEditor('Email@mail.com'); //Entire Row Protect
protectionrg.removeEditors(protectionrg.getEditors());
Logger.log("PROTECTED");
}
else{
//Remove protection
var protections = eventsheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);
protections.forEach(protection => {
var protectedRange = protection.getRange();
if(protectedRange.getRow() == editedcell.getRow()){
//Remove protection
protection.remove();
}
});
}
}
}
先决条件:
使用可安装的编辑触发器
所做的修改:
- getRow()返回一个整数。如果要使用
protect()
,则需要获取sheet
或range
对象。在您的情况下,您想保护整行。因此,您需要获取range
整行的。我使用Sheet.getRange(a1Notation)来获取range
整行的,其中a1Notation
是这种格式A1:1
(选择 row1) - 当 columnE 中的单元格设置为 时
ON HOLD
,通过添加首选编辑器并使用removeEditors(emailAddresses)删除现有编辑器来保护整行
笔记:
removeEditors()
不允许删除当前用户。如果工作表被其他用户(不是 Email@mail.com)修改并将其设置为ON HOLD
. 您的简单onEdit
触发器将无法在您的受保护范围内将另一个用户作为编辑者删除。作为一种解决方法,您需要使用可onEdit
安装触发器来运行所有者创建的代码。
- 最后,当 columnE 中的单元格设置为 以外的任何值时,使用getProtections(type)
ON HOLD
获取当前工作表中的所有受保护范围,保护类型设置为。然后循环所有现有的保护。检查保护范围的行索引是否与修改单元格的行索引相同。使用remove()删除保护RANGE
推荐阅读
- r - R Studio“过滤器”功能问题。过滤掉不包含特定值的项目
- javascript - JavaScript - 如何防止多个运算符输入?(加法和减法)
- java - 从 JAVA 的 Imgproc 类中删除 FONT_HERSHEY_SIMPLEX
- python - MySQL 错误:无法连接。通过 for 循环添加数据时设置无效
- python - 如何制作不下载系统音乐的discord.py音乐?
- flutter - Flutter 类型“String”不是“FutureOr”类型的子类型
' , 无键响应 Json - mysql - 如何在 octoberCMS 查询中组合多个 and or 条件?
- php - httpd.conf 会覆盖 php.ini 吗?
- r - R tmap:在 tmap_mode("view") 中绘制的多边形,但只有第一个观察值 ("plot")
- r - 如何对R中的“系列”向量进行向量化操作