我对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);
};
}
任何帮助或推动都会非常有帮助。
答案 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
}