checkbox - 选中复选框时隐藏行的 Google 表格脚本

标签 checkbox google-apps-script google-sheets hide checked

我试图找到一个工作代码,如果该行的 F 列中的复选框被选中,该代码将自动隐藏该行。

我已经尝试了我找到的每个脚本,但似乎没有任何效果。不幸的是,我不懂代码,无法找到问题所在。

这是我目前拥有的:

function onOpen() {
  var s = SpreadsheetApp.getActive().getSheetByName("Checklists");
  s.showRows(1, s.getMaxRows());

  s.getRange('F2:F200')
    .getValues()
    .forEach( function (r, i) {
    if (r[0] == "TRUE") 
      s.hideRows(i + 1);
    });
}

我正在处理的工作表是“ list ”,包含复选框的列是 F。复选框的值是 TRUE 或 FALSE。如果值为 TRUE,我希望隐藏该行。

有人可以帮忙吗!!!

最佳答案

我能够运行的快速测试是在 F 列中设置一列复选框,然后创建一个函数来捕获工作表上的每个编辑事件。当用户选中一个框然后隐藏该行时,这将立即捕获。

使用 onEdit 事件的诀窍在于确定哪个单元格实际被更改。在您的情况下,如果更改发生在 F 列中的复选框,您只想完全遵循您的逻辑。在我的代码中,我一直在使用一个函数来确保更改在所需范围内。该函数如下所示:

function isInRange(checkRange, targetCell) {
  //--- check the target cell's row and column against the given
  //    checkrange area and return True if the target cell is
  //    inside that range
  var targetRow = targetCell.getRow();
  if (targetRow < checkRange.getRow() || targetRow > checkRange.getLastRow()) return false;

  var targetColumn = targetCell.getColumn();
  if (targetColumn < checkRange.getColumn() || targetColumn > checkRange.getLastColumn()) return false;

  //--- the target cell is in the range!
  return true;
}

那么您的所有 onEdit 函数必须做的就是在触发编辑事件时快速调用以查看更改是否在您要查找的范围内。在这种情况下,我设置了一个包含我的范围的变量来检查:

var thisSheet = SpreadsheetApp.getActiveSheet();
var checkRange = thisSheet.getRange("F2:F200");  
if (isInRange(checkRange, eventObj.range)) {

之后,只需选择行号并隐藏或显示即可。这是完整的示例解决方案:

function isInRange(checkRange, targetCell) {
  //--- check the target cell's row and column against the given
  //    checkrange area and return True if the target cell is
  //    inside that range
  var targetRow = targetCell.getRow();
  if (targetRow < checkRange.getRow() || targetRow > checkRange.getLastRow()) return false;

  var targetColumn = targetCell.getColumn();
  if (targetColumn < checkRange.getColumn() || targetColumn > checkRange.getLastColumn()) return false;

  //--- the target cell is in the range!
  return true;
}

function onEdit(eventObj) {
  //--- you could set up a dynamic named range for this area to make it easier
  var thisSheet = SpreadsheetApp.getActiveSheet();
  var checkRange = thisSheet.getRange("F2:F200");  
  if (isInRange(checkRange, eventObj.range)) {
    //--- so one of the checkboxes has changed its value, so hide or show
    //    that row
    var checkbox = eventObj.range;
    var rowIndex = checkbox.getRow();
    Logger.log('detected change in checkbox at ' + checkbox.getA1Notation() + ', value is now ' + checkbox.getValue());
    if (checkbox.getValue() == true) {
      Logger.log('hiding the row');
      thisSheet.hideRows(rowIndex, 1);
    } else {
      Logger.log('showing the row');
      thisSheet.showRows(rowIndex, 1);
    }
  }
}

关于checkbox - 选中复选框时隐藏行的 Google 表格脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54316166/

相关文章:

c++ - CTreeCtrl - 仅对某些行/子项使用复选框

c# - INT 在复选框中转换为可更新的 bool 值

google-apps-script - Google App 脚本,.getValue 返回错误

multidimensional-array - 有没有办法将表单中的所有字段收集到一个二维数组中以写入 Google 表格?

performance - Google 电子表格脚本非常慢

javascript - jQuery 复选框不适用于第二次

javascript - 动态构建列表(取决于复选框)

javascript - 使用谷歌应用程序脚本从电子表格检索数据的按钮操作

javascript - ImportXML 的 JavaScript 等价物是什么?

google-sheets - 如何水平旋转 googlefinance()?