javascript - 如何使我的 'Show and hide rows' 脚本在 Google 表格中正常运行

标签 javascript google-apps-script google-sheets triggers

我正在尝试在(谷歌工作表)工作表“Info Pull”中使用脚本根据 C 列的内容显示/隐藏行。

目前我在 C 列中运行以下公式:

=if(or(len(H47)>0,len(I47)>0,len(J47)>0,len(K47)>0),"unhide","hide")

根据单元格 H、I、J 和 K 47 是否返回值,它会产生“隐藏”或“取消隐藏”。

如果上述任何单元格返回值,则 C 列中的相应单元格将变为“取消隐藏”,如果所有单元格均未返回值,则反之亦然。

我一直在尝试让此脚本根据 C 列的内容隐藏/取消隐藏行,但是,该脚本仅部分运行。

如果我主动在 C 单元格中键入“隐藏”,该行将隐藏。但是,如果我将 10 行的“隐藏”粘贴到 10 个 C 单元格中,则只有第一行会隐藏。同样,脚本不会根据 IF 公式的更改结果重新评估和隐藏/取消隐藏。如果我减少单元格 H47 的数量,将 C47 转为隐藏,则单元格不会隐藏。

此外,如果我将单元格 A1 设置为“隐藏”并在 C 列的一组单元格中粘贴“=$A$1”,则只有该组中的第一个单元格会隐藏,如果我将 A1 设置为'取消隐藏'。我认为这可能与我的触发器有关,但我对脚本编写还比较陌生,不确定。

function onEdit(e) {
  hideAndShowRows(e);
}

    function hideAndShowRows(e) {

  var sheetsToWatch = ['Info Pull'];
  var columnToWatch = 3;

  var sheet = e.range.getSheet();
  if (sheetsToWatch.indexOf(sheet.getName()) < 0)  {
    return;
  }
  var editedRow = e.range.getRow();
  var cellToWatch = sheet.getRange(editedRow, columnToWatch);
  if (cellToWatch.getValue().toLowerCase() === 'hide') {
    sheet.hideRows(editedRow);
  }
  if (cellToWatch.getValue().toLowerCase() === 'unhide') {
    sheet.showRows(editedRow);
  }
}

我希望根据 C 列中的公式是否返回隐藏/取消隐藏来隐藏/取消隐藏单元格。

最佳答案

您的代码“失败”,因为它仅获取编辑范围左上角单元格的行号

var editedRow = e.range.getRow();

var cellToWatch = sheet.getRange(editedRow, columnToWatch);

您可以使用以下属性来获取范围维度

e.range.rowStart
e.range.columnStart
e.range.rowEnd
e.range.columnEnd

或获取编辑范围使用的引用

e.range.getA1Notation();

相关

关于javascript - 如何使我的 'Show and hide rows' 脚本在 Google 表格中正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54372743/

相关文章:

javascript - 如何在不打开另一个窗口的情况下在屏幕上弹出图像

google-apps-script - 当启用文本换行时,getRowHeight() 返回默认行高而不是实际高度

javascript - 为什么下面的map函数会产生 undefined object ?

google-apps-script - 如何使用 UrlFetchApp 为 BigQuery Rest API 添加媒体上传?

google-apps-script - 使用脚本检测 Google 表格中的公式错误

javascript - 设置 Google 文档插件侧边栏的宽度不起作用

google-sheets - Google 表格跳转到单元格

google-sheets - "Failed to read the spreadsheet. Error code: PERMISSION_DENIED"- Tableau 自定义查询

JavaScript 错误无法从 &lt;input&gt; 标签获取输入

javascript - 在移动设备上禁用 jQuery datepicker,输入类型 ="date"