用Apps Script记录Google Doc访问日志并引导用户复制模板的方案咨询
问题1解决方案
- 直接分享模板/复制链接无法让原文档脚本正常运行:原Doc绑定的简单触发器
onOpen仅对拥有原文档编辑权限的用户生效,只读用户打开原文档不会触发脚本执行;用户通过复制链接生成的副本不会继承你原文档的绑定脚本,完全独立于原脚本体系,无法触发记录逻辑。 - 用Google Sheet作为基座的方案更合理:你可以将所有记录逻辑、副本生成逻辑都放在Sheet的绑定脚本中,仅给用户开放Sheet的查看权限,用户打开Sheet后自动触发记录,也可设置按钮让用户主动点击生成Doc模板副本,所有操作都在你可控的权限范围内,不需要开放原Doc的编辑权限,也能稳定记录用户身份和访问时间。
问题2解决方案
- 该功能仅对拥有原Doc编辑权限的用户生效,只读用户打开文档时不会执行
onOpen触发器,无法弹出提示。如果你的目标用户都有原Doc编辑权限,可以用修改后的代码实现延迟X秒弹出复制提示,同时保留原有记录逻辑:
// 初始化计数 function setup() { var propertyService = PropertiesService.getDocumentProperties(); propertyService.setProperty('viewCount', '0'); } // 文档打开触发逻辑 function onOpen(e) { // 原有记录逻辑 var count = parseInt(PropertiesService.getDocumentProperties().getProperty('viewCount')) + 1; PropertiesService.getDocumentProperties().setProperty('viewCount', count); Logger.log(count); var sheet = SpreadsheetApp.openById('替换为你的表格ID'); var user = Session.getActiveUser().getEmail(); var date = new Date(); sheet.getSheetByName('View Count').appendRow([user, date]); // 延迟3秒(3000毫秒,可自行调整数值)弹出提示 Utilities.sleep(3000); var ui = DocumentApp.getUi(); ui.alert('使用提示', '请点击文件 > 制作副本,创建自己的填写模板,不要直接修改原文档', ui.ButtonSet.OK); }
- 注意:
Utilities.sleep()的参数单位是毫秒,你可以根据需要调整延迟时长。
内容的提问来源于stack exchange,提问作者Allister Lobo
相关产品推荐
相关产品推荐

