首页 > 解决方案 > 如何根据特定的单元格值显示/隐藏行?

问题描述

我正在尝试根据数据验证列表的响应将一些显示/隐藏行逻辑放入谷歌工作表中。

如果用户从单元格 C42 中的数据验证列表中选择值“General Account Call”,我想显示第 43 行到第 53 行和第 78 行到第 101 行。此外,如果用户勾选单元格 C40 中的复选框,我想显示 C41 行。

我不知道我是否可以使用 onEdit 函数“监视”多个单元格。

我发现了几个类似的(ish)脚本,它们根据同一行中单元格中的值隐藏一行,并尝试修改它们无济于事。然后我尝试回到基础并放置一些东西来监视一个单元格并隐藏不同的行,再次无济于事

function onEdit(e) {
  var ss = SpreadsheetApp.getActive()
  var sheet = SpreadsheetApp.getActiveSheet()
  var cell = sheet.getRange('D39')
  var cellContent = cell.getValue()

  if(cellContent === Y) {
    Sheet.hideRow(40)
  }
}

标签: google-apps-scriptgoogle-sheets

解决方案


您的代码应该是:

function onEdit() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getActiveSheet();
  var cell = sheet.getRange('D39');
  var cellContent = cell.getValue();

  if(cellContent == 'Y') {
    sheet.hideRows(11); 

  }
}

有几件事是错误的:

  • 即使ssandsheet声明有效,您是从 SpreadsheetApp 而不是从 获取工作表ss,因此ss没有被使用。
  • cellContent == 'Y'是将单元格与字符串进行比较的正确方法,如果删除引号,它会将其解释为不存在的变量 Y。此外,===它不是必需的,因为它检查类型和值,我们只想要值。实际上,即使值相同但类型不同,它也会返回 false
  • 你写Sheet.hideRow而不是sheet.hiderow. Javascript 是区分大小写的,所以要小心!
  • 该方法hideRow隐藏给定 Range中的行,因此我们必须使用hideRows, 如果您可以使用整数(在本例中为 11)隐藏整行。
  • 你没有放任何分号;

您没有收到任何这些错误,因为我想您正在测试更改 D39 值的代码。如果您手动执行代码,所有这些都会显示出来。

因此,为了根据几个单元格隐藏几行,您必须获取事件信息(e),并获取正在编辑的单元格。

像这样做一个 if:

  var cell = e.range.getA1Notation(); //Gets the Cell you edited
  var cell_value = e.range.getValue(); //Gets the value of the cell

  if(cell == 'C42' && cell_value == 'General Account Call'){
    sheet.showRows(43, 10);
    sheet.showRows(78, 23);

  }

  if (cell == 'C40' && cell_value){ //The checkbox value returns true or false
    sheet.showRows(41);
}

中的第二个数字showRows是将显示的行数。


推荐阅读