首页 > 解决方案 > 根据 Google 工作表上的复选框隐藏/取消隐藏行

问题描述

我有一个谷歌电子表格,它在 P 列中有复选框,当勾选复选框时,相应的行会自动隐藏。

我希望在 G1 中添加一个额外的复选框,如果选中,它将显示所有隐藏的行,如果可能,在 E1 中添加一个复选框,然后再次隐藏在 P 列中勾选了复选框的所有行。

基本上,当我勾选 P 列中的复选框时,我想自动隐藏行然后我可能需要通过单击 G1 中的复选框来查看隐藏的行。当我完成查看上面隐藏的行时,单击 E1 中的复选框,在 P 列中选中的所有行将再次隐藏。

function onEdit(e){ 
    if (e.range.columnStart != 16 || e.value != "TRUE") return;
    SpreadsheetApp.getActiveSheet().hideRows(e.range.rowStart); 
}

标签: google-apps-scriptgoogle-sheets

解决方案


解决方案:

  • 检查编辑的单元格是否G1通过getA1Notation()。在这种情况下,检查 value 是否为TRUE,如果是,则显示所有行。显示所有行的一个简单选项是使用unhideRow(row),设置A:A为您的范围(因为这包括工作表中的所有行)。
  • 检查编辑的单元格是否为E1. 如果值为,则通过getValues()从列TRUE中检索所有值,遍历它们,如果值为,则使用hideRows(rowIndex)隐藏相应的行。Ptrue
  • 检查已编辑的单元格是否在 columnP中,hideRows如果是这样,请在已编辑的行上使用,就像您已经在做的那样。

代码片段:

function onEdit(e){
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = e.range;
  const editedValue = e.value;
  if (range.getA1Notation() === "G1" && editedValue === "TRUE") {
    sheet.unhideRow(sheet.getRange("A:A"));
  } else if (range.getA1Notation() === "E1" && editedValue === "TRUE") {
    const firstRow = 2;
    const lastRow = sheet.getLastRow();
    const pValues = sheet.getRange("P" + firstRow + ":P" + lastRow).getValues().flat();
    pValues.forEach((pValue,i) => {
      if (pValue === true) {
        sheet.hideRows(i + firstRow);
      }
    });
  } else if (e.range.columnStart === 16 && editedValue === "TRUE") {
    sheet.hideRows(range.rowStart); 
  }
}

推荐阅读