若范围(G11:G25)中的任何一行包含布尔值(true),则运行函数,否则为msgBox



我在工作表"Section 2"中运行的函数(clearRowContents(将清除列表中任何选中项目(第H列(的内容和验证,以及复选框本身(第G列(。剩下的未选中框和列表项将被排序,以清除clearRowContents函数刚刚创建的任何空行。此功能在测试时起作用。

然而,如果没有检查项目(col G==false(;清除";按钮时,如何弹出消息,让用户知道他们必须首先选中项目旁边的框,然后按下按钮从列表中清除其内容我正试图弄清楚如何编写clearItemMessage函数的脚本。

此外,出于编写脚本的目的,此工作表将被多次复制,以创建不同主题的各种验证菜单。。。每个薄片将是不同的"薄片";章节";在具有自己独特下拉列表集的手册中(在MASTER DROPDOWN选项卡中(。

链接到图纸:https://docs.google.com/spreadsheets/d/1ZdlJdhA0ZJOIwLA9dw5-y5v1FyLfRSywjmQ543EwMFQ/edit?usp=sharing

代码:

function clearItemMessage(){
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var checkboxRange = ss.getRangeList("$G$11:$G$25").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$11:$G$25");
var listFont = ss.getRange("$H$11:$H$25");

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$11:$H$25");
range.sort({column: 7, ascending: false});

}

在您的情况下,按如下方式修改clearItemMessage()如何?

修改的脚本:

function clearItemMessage(){
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var checkboxes = ss.getRange("$G$11:$G$25").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 (){

参考:

  • 过滤器((

最新更新