复制隐藏模板后hideSheet()函数无法生效,求解决方法?
解决隐藏模板工作表复制后无法重新隐藏的问题
我来帮你搞定这个问题!核心问题出在你用setActiveSheet()激活了隐藏的模板表——这个操作会强制把隐藏的工作表显示出来,虽然你之后调用了hideSheet(),但可能因为工作表激活后的状态变化、执行顺序的微小延迟导致隐藏失效。其实我们可以完全避开激活工作表的操作,直接操作模板表对象来完成复制和隐藏,这样逻辑更清晰也更可靠。
核心解决思路
- 跳过激活操作:激活隐藏工作表是多余的步骤,还会触发显示,直接通过工作表对象调用复制方法即可。
- 直接操作模板表对象:获取模板表对象后,直接复制它,复制完成后立刻调用隐藏方法,避免状态干扰。
- 优化新表获取方式:复制方法会直接返回新表对象,不用再通过临时名称查找,避免潜在的名称冲突问题。
修改后的完整代码
function googleQuiz(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); // 直接获取模板工作表对象,无需激活 var templateSheet = ss.getSheetByName('QuizFormTPlate'); // 直接复制模板表,返回新创建的工作表对象 var newSheet = templateSheet.duplicateSheet(); // 复制完成后立即隐藏模板表 templateSheet.hideSheet(); // 给新工作表命名 var date = new Date(); var tz = ss.getSpreadsheetTimeZone(); var marksDate = Utilities.formatDate(date, tz, 'dd-MMM'); var name = "G-Quiz ".concat(marksDate); newSheet.setName(name); // 插入单元格内容 newSheet.getRange("C2").setValue('Formative'); }
额外注意事项
如果你的模板表设置的是非常隐藏(右键工作表 → 隐藏 → 非常隐藏),普通的hideSheet()无法将其设为非常隐藏,需要改用setSheetVisibility()方法:
// 将模板表设为非常隐藏 templateSheet.setSheetVisibility(SpreadsheetApp.SheetVisibility.VERY_HIDDEN);
内容的提问来源于stack exchange,提问作者Chris Shortreed
相关产品推荐
相关产品推荐

