如果范围 (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 (){.

参考: