如果范围 (G11:G25) 中的任何行包含布尔值 (true),则 运行 函数,否则 msgBox
If any row in range (G11:G25) contains boolean (true) then run function, else msgBox
运行 sheet 'Section 2' 中的函数 运行 (clearRowContents) 将清除列表中任何选中项目(col H)以及复选框的内容和验证本身(col G)。然后将对剩余未选中的框和列表项进行排序,以清除由 clearRowContents 函数刚刚创建的任何空白行。此功能经测试有效。
但是,如果没有项目被选中(col G == false)并且按下了“清除”按钮,我如何弹出一条消息让用户知道他们必须先检查项目旁边的框,然后按下按钮以从列表中清除其内容?我正在尝试了解如何为 clearItemMessage 函数编写脚本。
此外,出于脚本编写目的,此 sheet 将被复制多次以针对不同主题创建各种验证菜单...每个 sheet 将成为手册中的不同“章节”有自己独特的一组下拉菜单(在主下拉选项卡中)。
link 到 sheet:https://docs.google.com/spreadsheets/d/1ZdlJdhA0ZJOIwLA9dw5-y5v1FyLfRSywjmQ543EwMFQ/edit?usp=sharing
代码:
function clearItemMessage(){
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var checkboxRange = ss.getRangeList("$G:$G").getValues();
if (checkboxRange == true){
clearRowContents (col);
} else (Browser.msgBox("To delete items, select the box next to the items and then press the delete button."));
}
function clearRowContents (col){ // col is the index of the column to check for checkbox being true
var col = 7; //col G
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = ss.getDataRange().getValues();
//Format font & size
var sheetFont = ss.getRange("A:Z");
var boxFont = ss.getRange("$G:$G");
var listFont = ss.getRange("$H:$H");
sheetFont.setFontFamily("Montserrat");
boxFont.setFontSize(8)
.setFontColor("#434343")
.setBackground("#ffffff");
listFont.setFontSize(12)
.setFontColor("#434343")
.setBackground("#ffffff");
//clear 'true' data validations
var deleteRanges = data.reduce(function(ar, e, i) {
if (e[col - 1] === true) {
return ar.concat(["H" + (i + 1), "G" + (i + 1)]);
}
return ar;
}, []);
if (deleteRanges.length > 0) {
ss.getRangeList(deleteRanges).clearContent().clearDataValidations();
}
//sort based on checkbox value
var range = ss.getRange("$G:$H");
range.sort({column: 7, ascending: false});
}
根据你的情况,修改clearItemMessage()
怎么样?
修改后的脚本:
function clearItemMessage(){
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var checkboxes = ss.getRange("$G:$G").getValues();
if (checkboxes.filter(([g]) => g === true).length > 0){ // or if (checkboxes.some(([g]) => g === true)) {
clearRowContents();
} else {
Browser.msgBox("To delete items, select the box next to the items and then press the delete button.");
}
}
- 根据你的问题,我理解了你的
clearRowContents
作品。所以我提出修改clearItemMessage
.
- 在您的
clearRowContents
中,使用了 var col = 7
。所以我认为function clearRowContents (col){
可以修改为function clearRowContents (){
.
参考:
运行 sheet 'Section 2' 中的函数 运行 (clearRowContents) 将清除列表中任何选中项目(col H)以及复选框的内容和验证本身(col G)。然后将对剩余未选中的框和列表项进行排序,以清除由 clearRowContents 函数刚刚创建的任何空白行。此功能经测试有效。
但是,如果没有项目被选中(col G == false)并且按下了“清除”按钮,我如何弹出一条消息让用户知道他们必须先检查项目旁边的框,然后按下按钮以从列表中清除其内容?我正在尝试了解如何为 clearItemMessage 函数编写脚本。
此外,出于脚本编写目的,此 sheet 将被复制多次以针对不同主题创建各种验证菜单...每个 sheet 将成为手册中的不同“章节”有自己独特的一组下拉菜单(在主下拉选项卡中)。
link 到 sheet:https://docs.google.com/spreadsheets/d/1ZdlJdhA0ZJOIwLA9dw5-y5v1FyLfRSywjmQ543EwMFQ/edit?usp=sharing
代码:
function clearItemMessage(){
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var checkboxRange = ss.getRangeList("$G:$G").getValues();
if (checkboxRange == true){
clearRowContents (col);
} else (Browser.msgBox("To delete items, select the box next to the items and then press the delete button."));
}
function clearRowContents (col){ // col is the index of the column to check for checkbox being true
var col = 7; //col G
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = ss.getDataRange().getValues();
//Format font & size
var sheetFont = ss.getRange("A:Z");
var boxFont = ss.getRange("$G:$G");
var listFont = ss.getRange("$H:$H");
sheetFont.setFontFamily("Montserrat");
boxFont.setFontSize(8)
.setFontColor("#434343")
.setBackground("#ffffff");
listFont.setFontSize(12)
.setFontColor("#434343")
.setBackground("#ffffff");
//clear 'true' data validations
var deleteRanges = data.reduce(function(ar, e, i) {
if (e[col - 1] === true) {
return ar.concat(["H" + (i + 1), "G" + (i + 1)]);
}
return ar;
}, []);
if (deleteRanges.length > 0) {
ss.getRangeList(deleteRanges).clearContent().clearDataValidations();
}
//sort based on checkbox value
var range = ss.getRange("$G:$H");
range.sort({column: 7, ascending: false});
}
根据你的情况,修改clearItemMessage()
怎么样?
修改后的脚本:
function clearItemMessage(){
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var checkboxes = ss.getRange("$G:$G").getValues();
if (checkboxes.filter(([g]) => g === true).length > 0){ // or if (checkboxes.some(([g]) => g === true)) {
clearRowContents();
} else {
Browser.msgBox("To delete items, select the box next to the items and then press the delete button.");
}
}
- 根据你的问题,我理解了你的
clearRowContents
作品。所以我提出修改clearItemMessage
. - 在您的
clearRowContents
中,使用了var col = 7
。所以我认为function clearRowContents (col){
可以修改为function clearRowContents (){
.