需求:开发每日自动锁定对应日期电子表格工作表的脚本
自动锁定当日工作表的Google Apps Script实现
完整脚本代码
function lockDailySheet() { // 获取当日日期对应的工作表名称(1-31) const today = new Date().getDate().toString(); const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); const targetSheet = spreadsheet.getSheetByName(today); // 检查目标工作表是否存在 if (!targetSheet) { console.log(`未找到名为${today}的工作表`); return; } // 获取工作表的保护设置,若不存在则创建新保护 let sheetProtection = targetSheet.getProtections(SpreadsheetApp.ProtectionType.SHEET)[0]; if (!sheetProtection) { sheetProtection = targetSheet.protect(); } // 移除所有编辑例外范围 const protectedRanges = sheetProtection.getEditableRanges(); protectedRanges.forEach(range => sheetProtection.removeEditableRange(range)); // 移除所有可编辑用户(仅保留所有者权限) const editors = sheetProtection.getEditors(); editors.forEach(editor => sheetProtection.removeEditor(editor)); // 可选:若需要允许特定用户(如管理员)仍可编辑,取消注释并替换邮箱 // sheetProtection.addEditor("admin@yourclinic.com"); console.log(`已成功锁定工作表:${today}`); }
脚本说明
- 日期匹配逻辑:通过
new Date().getDate()获取当日日期数字,转为字符串后匹配"1"至"31"的工作表名。 - 保护处理:先检查目标工作表是否已有保护,无则创建;随后移除所有预设的可编辑例外范围,同时移除所有普通编辑用户,仅保留文档所有者权限。
- 容错处理:若当日对应的工作表不存在(如31号但当月无31天),脚本会打印日志并终止,避免报错。
设置每日自动触发
- 打开电子表格,点击顶部菜单「扩展程序」→「Apps 脚本」。
- 在脚本编辑器粘贴上述代码,保存项目(如命名为「DailySheetLock」)。
- 点击左侧时钟图标进入「触发器」页面,点击「添加触发器」。
- 配置触发器选项:
- 运行函数:
lockDailySheet - 部署类型:「基于时间的触发器」
- 时间驱动类型:「日计时器」
- 时间间隔:「每天 20:00 到 21:00」(可按需调整至20:00左右时段)
- 运行函数:
- 点击「保存」,按提示完成权限授权。
注意事项
- 确保工作表名称严格为"1"到"31",无额外空格或符号,否则脚本无法匹配目标表。
- 脚本需文档所有者授权,确保你拥有该电子表格的编辑权限。
- 如需保留特定用户(如诊所管理员)的编辑权限,取消脚本中对应注释并替换为目标邮箱即可。
内容的提问来源于stack exchange,提问作者Michael Days
相关产品推荐
相关产品推荐

