我一直在尝试制作锻炼日历的脚本。这个想法是在单独的选项卡上有两个版本。一个是日期/日期和锻炼的列表,第二个是传统的日历视图。
我遇到的挑战是扩展日历的选项,如果选中了复选框,则取消隐藏隐藏的行。对于“计划”视图,我已经能够使其正常工作,但是无法在日历视图的单独工作表上使其正常工作。我希望一个onEdit动作可以更改两个工作表。
这是我目前所在的位置: 计划选项卡上H2中的复选框是触发器。如果未选中,则将隐藏97-124行,并在选中该框时显示。成功代码如下,基于我对this stackoverflow question所做的修改。
function onEdit(e) {
var sheet = e.range.getSheet();
if (sheet.getName() !== 'Schedule') return;
if (e.range.getColumn() !== 8) return;
if (e.value == 'TRUE') {
switch (e.range.getRow()) {
case 2:
sheet.showRows(97,28);
break;
}
} else {
switch (e.range.getRow()) {
case 2:
sheet.hideRows(97,28);
break;
}
}
};
但是我无法影响第二张日历表。默认情况下,可以看到三个月,然后根据日期如何显示隐藏的行,再显示1-2个月。 C1单元格中有一个公式可以反映月份数(行1最终将被隐藏),但是我一直无法找到一种方法来使代码触发公式的结果。使用this link中的代码,我可以通过手动输入要显示的月份数来获得所需的结果,但这是我要避免的额外步骤。 (我知道我可以通过将计算出的隐藏行的日期移动到工作表的顶部来简化此操作,以获得更简洁的showRows / hideRows;在我决定尝试使工作表自动化之前已完成了布局)。 / p>
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();
if( activeSheet.getName() == 'Calendar' ) {
var activeRange = ss.getActiveRange();
var activeRow = activeRange.getRow();
var activeColumn = activeRange.getColumn()
if( activeColumn == 3 && activeRow == 1 ) {
if ( activeRange.getValue() == '3' )
activeSheet.hideRows(65,42);
if ( activeRange.getValue() == '4' )
activeSheet.showRows(65,21);
activeSheet.hideRows(66,1);
activeSheet.hideRows(69,1);
activeSheet.hideRows(72,1);
activeSheet.hideRows(75,1);
activeSheet.hideRows(78,1);
activeSheet.hideRows(81,1);
activeSheet.hideRows(84,1);
activeSheet.hideRows(86,21);
if ( activeRange.getValue() == '5' )
activeSheet.showRows(65,42);
activeSheet.hideRows(66,1);
activeSheet.hideRows(69,1);
activeSheet.hideRows(72,1);
activeSheet.hideRows(75,1);
activeSheet.hideRows(78,1);
activeSheet.hideRows(81,1);
activeSheet.hideRows(84,1);
activeSheet.hideRows(87,1);
activeSheet.hideRows(90,1);
activeSheet.hideRows(93,1);
activeSheet.hideRows(96,1);
activeSheet.hideRows(99,1);
activeSheet.hideRows(102,1);
activeSheet.hideRows(105,1);
}
}
};
任何帮助,甚至确认onEdit都不会影响多张图纸,将不胜感激!
答案 0 :(得分:1)
onEdit
简单触发器可以影响多个工作表,它具有多个限制,包括30秒的执行时间限制。参考https://developers.google.com/apps-script/guides/triggers
由于hideRows
操作缓慢,您编写的脚本中有几个脚本,也许解决方法是改用可安装的触发器。