使用 onEdit() 更改单元格背景
Change cell background with onEdit()
目标:
- 获取编辑后的复选框
- 获取范围内的所有复选框(第 2–7 列,与已编辑复选框相同的行)
- 如果所有复选框 return 为“TRUE”,则在范围内设置背景(第 1-7 列,与已编辑复选框相同的行)
似乎代码什么也没做。
function onEdit(event) {
var sheet = event.source.getActiveSheet(), //get edited sheet
row = event.range.getRow(), // get row needed
column = 2, // set the starting column
test,
userValues = [];
while (column<=7) {
if (sheet.getValue(row,column) == "TRUE") {
test = true
} else {
test = false;
break;
}
column++;
}
if (test) {
sheet.getRange(row,1,1,7).setBackgrounds("#b6d7a8");
}
}
我相信你的目标如下。
- 您选中了“B”到“G”列。
- 当“B”到“G”列的复选框都被选中时,你想将同一行的“A”到“G”列的背景颜色设置为
#b6d7a8
。
- 根据你的情况,我猜想当所有复选框都没有被选中时,你可能希望将背景颜色设置为默认颜色。
当我看到你的脚本时,循环中使用了getValue
。在这种情况下,工艺成本会很高。而且,当你使用 sheet.getRange(row,1,1,7).setBackgrounds("#b6d7a8")
时,你可以使用 sheet.getRange(row,1,1,7).setBackground("#b6d7a8")
.
这样的话,下面的修改怎么样?
修改后的脚本:
function onEdit(event) {
var sheetName = "Sheet1"; // Please set the sheet name.
var range = event.range;
var sheet = event.source.getActiveSheet();
if (sheet.getSheetName() != sheetName || range.columnStart < 2 || range.columnStart > 7) return;
var r = sheet.getRange(range.rowStart, 1, 1, 7)
var checks = r.offset(0, 1, 1, 6).getValues()[0].every(e => e === true);
r.setBackground(checks ? "#b6d7a8" : null);
}
- 当您使用此脚本时,请选中“B”到“G”列的复选框。当“B”到“G”列的所有复选框都被选中时,“A”到“G”列的背景颜色更改为
#b6d7a8
.
注:
此脚本由 OnEdit 触发器运行。因此,请编辑从“B”到“G”列的复选框单元格。这样,脚本就是运行。当你用脚本编辑器直接运行这个脚本时,会出现错误。请注意这一点。
当不需要检查sheet名字时,也可以使用下面的脚本
function onEdit(event) {
var range = event.range;
var sheet = event.source.getActiveSheet();
if (range.columnStart < 2 || range.columnStart > 7) return;
var r = sheet.getRange(range.rowStart, 1, 1, 7)
var checks = r.offset(0, 1, 1, 6).getValues()[0].every(e => e === true);
r.setBackground(checks ? "#b6d7a8" : null);
}
参考文献:
目标:
- 获取编辑后的复选框
- 获取范围内的所有复选框(第 2–7 列,与已编辑复选框相同的行)
- 如果所有复选框 return 为“TRUE”,则在范围内设置背景(第 1-7 列,与已编辑复选框相同的行)
似乎代码什么也没做。
function onEdit(event) {
var sheet = event.source.getActiveSheet(), //get edited sheet
row = event.range.getRow(), // get row needed
column = 2, // set the starting column
test,
userValues = [];
while (column<=7) {
if (sheet.getValue(row,column) == "TRUE") {
test = true
} else {
test = false;
break;
}
column++;
}
if (test) {
sheet.getRange(row,1,1,7).setBackgrounds("#b6d7a8");
}
}
我相信你的目标如下。
- 您选中了“B”到“G”列。
- 当“B”到“G”列的复选框都被选中时,你想将同一行的“A”到“G”列的背景颜色设置为
#b6d7a8
。 - 根据你的情况,我猜想当所有复选框都没有被选中时,你可能希望将背景颜色设置为默认颜色。
当我看到你的脚本时,循环中使用了getValue
。在这种情况下,工艺成本会很高。而且,当你使用 sheet.getRange(row,1,1,7).setBackgrounds("#b6d7a8")
时,你可以使用 sheet.getRange(row,1,1,7).setBackground("#b6d7a8")
.
这样的话,下面的修改怎么样?
修改后的脚本:
function onEdit(event) {
var sheetName = "Sheet1"; // Please set the sheet name.
var range = event.range;
var sheet = event.source.getActiveSheet();
if (sheet.getSheetName() != sheetName || range.columnStart < 2 || range.columnStart > 7) return;
var r = sheet.getRange(range.rowStart, 1, 1, 7)
var checks = r.offset(0, 1, 1, 6).getValues()[0].every(e => e === true);
r.setBackground(checks ? "#b6d7a8" : null);
}
- 当您使用此脚本时,请选中“B”到“G”列的复选框。当“B”到“G”列的所有复选框都被选中时,“A”到“G”列的背景颜色更改为
#b6d7a8
.
注:
此脚本由 OnEdit 触发器运行。因此,请编辑从“B”到“G”列的复选框单元格。这样,脚本就是运行。当你用脚本编辑器直接运行这个脚本时,会出现错误。请注意这一点。
当不需要检查sheet名字时,也可以使用下面的脚本
function onEdit(event) { var range = event.range; var sheet = event.source.getActiveSheet(); if (range.columnStart < 2 || range.columnStart > 7) return; var r = sheet.getRange(range.rowStart, 1, 1, 7) var checks = r.offset(0, 1, 1, 6).getValues()[0].every(e => e === true); r.setBackground(checks ? "#b6d7a8" : null); }