Google App Script:时间驱动触发器下DriveApp.getFolderById失效问题
问题原因及解决方法
核心原因
这个错误的本质是时间驱动触发器的权限上下文和手动运行不一致,具体分这几点:
- 手动运行脚本时,是在你的账号完整权限环境下执行,能直接访问Drive文件夹;但触发器属于后台执行模式,默认权限范围更窄,如果脚本没明确申请完整Drive权限,就会触发权限不足的错误。
- 手动运行时的授权和触发器的授权是独立的,哪怕你手动授权过,触发器可能还是用的受限权限范围,导致无法调用
DriveApp.getFolderById()。 - 另外要确认目标文件夹的权限:如果文件夹不是你创建的,或者没给你的账号(脚本所有者)加访问/编辑权限,触发器后台执行时也会识别不了这个文件夹ID。
解决步骤
- 添加完整Drive权限声明
在脚本开头添加权限注释,明确请求Drive完整访问权限,然后重新手动运行一次脚本完成授权:
/** * @OnlyCurrentDoc * @OAuth2Scope https://www.googleapis.com/auth/drive */ function backup(folder="1FrDJm--FLGsw8gg5M1pHRcw-T70q8sxF"){ var ss = SpreadsheetApp.getActive(); let toFolder = DriveApp.getFolderById(folder); DriveApp.getFileById(ss.copy(ss.getName()).getId()).moveTo(toFolder); ss.rename("backup(" + getNextSunday() + ")") }
重新创建触发器
删掉原来的时间驱动触发器,重新创建一个——旧触发器可能还保留着旧的权限配置,重新创建后会使用更新后的权限。验证文件夹权限
登录Google Drive,找到目标文件夹,确认你的账号拥有至少「编辑」权限,同时检查文件夹ID是否完全正确(注意ID里的连字符是正常内容,不要误改)。
内容的提问来源于stack exchange,提问作者shenkwen
相关产品推荐
相关产品推荐

