Google表格:根据细胞价值隐藏行数

时间:2016-12-18 03:29:17

标签: google-sheets

我对Google脚本非常陌生,并且已经回答了类似于我现在要求的类似问题,但是大炮似乎在我之前想要做的事情上适合先前的建议。我有一个简单的"是/否"在我的工作表的单元格A2中下拉。如果"是"如果被选中,我想隐藏第5行和第7行。我一直在研究以下内容:

 Prior Year my onEdit(e) {
  Logger.log('e.value: ' + e.value);

 var cellEdited = e.range.getA1Notation();
 Logger.log('cellEdited: ' + cellEdited);

if (cellEdited === "A2" && e.value === "yes") {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("TX MD 2017");
var maxRows = sheet.getMaxRows();

theSheet.hideRows(5,7);
 };
}

任何帮助或推动都会非常有帮助。

1 个答案:

答案 0 :(得分:1)

代码对案例很挑剔

在您的项目描述中,您将讨论选项为“是”/“否”,并将“Y”大写。如果情况确实如此,则e.value === 'yes'将无法按预期工作。在比较它们时一定要使字符串相同:

`e.value.toLowercase() === 'yes'`

错误的功能:Sheet.hideRows

hideRows的API指出第一个参数是要从中开始的行,第二个参数是在起始行之后要隐藏的行数。这使您的代码隐藏了下面的7行,包括第5行。如果你想隐藏第5行和第7行,你应该这样做:

theSheet.hideRow(5);
theSheet.hideRow(7);

避免添加不必要的权限

当您使用SpreadsheetApp.getActiveSpreadsheet时,您需要允许该脚本访问和修改您的电子表格。这打破了最小权限的安全/保护原则;通常,您希望为用户提供尽可能少的访问权限来完成其任务。由于您可以使用e.source访问事件对象中的电子表格,因此最好只使用它:

var ss = e.source;
var sheet = ss.getSheetByName("TX MD 2017");

// You don't use maxRows, so get rid of it
sheet.hideRow(5); // theSheet is not defined
sheet.hideRow7);

上一年我的?

这不是有效的JavaScript。它应该是:

function onEdit(e) {
    // code
}