You need to enable JavaScript to run this app. Google Sheets自定义菜单clearCalendar报Script function not found
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets自定义菜单clearCalendar报Script function not found

脚本报错根因排查与修正方案

核心报错原因

  • onOpen 函数括号闭合位置错误:在调用addToUi()方法后没有给onOpen补上结束大括号,直接把后续的scheduleShifts(空注释版)、clearCalendar两个函数全部嵌套进了onOpen的函数作用域内部。这两个函数属于onOpen的内部局部函数,全局环境无法识别,因此点击菜单时会报「Script function not found」错误。
  • 函数重复定义:全局作用域已经存在一个可正常运行的scheduleShifts函数,又在onOpen内部重写了同名称的空函数,代码结构混乱会导致Apps Script的函数识别出现异常。
  • 附带逻辑错误:原scheduleShifts中调用CalendarApp.getCalendarById时传入的是硬编码字符串"calendarID",没有传入之前从C1单元格读取到的变量calendarID,后续运行时会触发日历权限类报错。

修正后的标准代码结构

// 全局作用域下的日历同步函数
function scheduleShifts() {
    var spreadsheet = SpreadsheetApp.getActiveSheet();
    var calendarID = spreadsheet.getRange("C1").getValue();
    var eventCal = CalendarApp.getCalendarById(calendarID);
    var signups = spreadsheet.getRange("A2:C3").getValues();
    for (x=0; x<signups.length; x++) {
        var shift = signups[x];
        var startTime = shift[0];
        var endTime = shift[1];
        var volunteer= shift[2];
        eventCal.createEvent(volunteer, startTime, endTime);
    }
}

// 全局作用域下的日历清理函数
function clearCalendar() {
    var spreadsheet = SpreadsheetApp.getActiveSheet();
    var calendarID = spreadsheet.getRange("C1").getValue();
    var eventCal = CalendarApp.getCalendarById(calendarID);
    var signups = spreadsheet.getRange("A2:C3").getValues();
    // 按排班表的时间范围匹配对应日历事件并删除
    for (x=0; x<signups.length; x++) {
        var shift = signups[x];
        var targetEvents = eventCal.getEvents(shift[0], shift[1]);
        targetEvents.forEach(event => event.deleteEvent());
    }
}

// 自定义菜单加载入口
function onOpen() {
    var ui = SpreadsheetApp.getUi();
    ui.createMenu('Sync to Calendar')
      .addItem('Schedule shifts', 'scheduleShifts')
      .addSeparator()
      .addItem('Delete shifts from Calendar','clearCalendar')
      .addToUi();
}

调试注意事项

  • 所有需要被自定义菜单触发的函数,必须定义在脚本的全局作用域,不能嵌套在其他函数内部,否则Apps Script无法识别可调用入口。
  • 单个脚本文件内禁止重复定义同名函数,后定义的函数会覆盖前者,导致原有逻辑失效。
  • 保存修正后的代码后,重新打开关联的Google表格,触发onOpen重新加载自定义菜单,再测试功能。

内容的提问来源于stack exchange,提问作者Zieyra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 09:27:03