You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script日历脚本报错求助:多嘉宾添加失败

修复Google Apps Script多嘉宾日历事件创建报错问题

问题背景

脚本在addGuests参数传入单个邮箱时运行正常,但传入多个邮箱数组时抛出错误:Exception: Invalid argument: [Ljava.lang.Object;@7fcbe025 mySetEvent,需要实现自动创建带多嘉宾的日历事件,并发送带抄送的邮件。

错误原因

CalendarApp的createEvent方法中,guests参数要求传入逗号分隔的邮箱字符串,而非数组。直接传入数组会导致类型不匹配,触发无效参数错误。

修复后的完整代码

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Set Reminder')
      .addItem('创建日历事件并发送邮件', 'mySetEvent')
      .addToUi();
}

function mySetEvent() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var selectedRange = sheet.getActiveRange();
  var numRows = selectedRange.getNumRows();
  var signups = selectedRange.getValues();
  var calendarIds = ['lventeria@kons.md']; // 在此添加你的日历ID

  for (var i = 0; i < numRows; i++) {
    var eventTitle = signups[i][2] + ' ' + signups[i][3];
    var notes = signups[i][4] + '\n' + signups[i][5] + '\n' + signups[i][6];
    var columnHData = signups[i][7];

    if (eventTitle && notes && columnHData) {
      var startDate = new Date(signups[i][7]);
      var startTime = new Date(signups[i][8]);
      var startDateTime = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate(), startTime.getHours(), startTime.getMinutes(), 0);
      var endDateTime = new Date(startDateTime.getTime() + (60 * 60 * 1000)); // 事件时长设为1小时

      var addGuests = ['rieenteria@gmail.com', 'enteriamarilou@gmail.com', 'reyenteria@gmail.com']; // 添加嘉宾邮箱地址

      var eventConfig = {
        description: notes,
        sendNotifications: true,
        guests: addGuests.join(',') // 将数组转为逗号分隔的字符串
      };

      var oneDayBeforeMinutes = 24 * 60; // 提前1天的分钟数
      eventConfig.reminders = {
        useDefault: false,
        overrides: [
          {
            method: 'email',
            minutes: oneDayBeforeMinutes
          }
        ]
      };

      for (var j = 0; j < calendarIds.length; j++) {
        var calendarId = calendarIds[j];
        var eventCal = CalendarApp.getCalendarById(calendarId);
        // 直接获取创建后的事件对象,无需再搜索
        var createdEvent = eventCal.createEvent(eventTitle, startDateTime, endDateTime, eventConfig);
        
        // 添加提前1天的邮件提醒
        createdEvent.addEmailReminder(oneDayBeforeMinutes);
        sendNotificationEmail(eventTitle, startDateTime, notes, columnHData, calendarId);
      }
    }
  }
}

function sendNotificationEmail(eventTitle, startDateTime, notes, columnHData, calendarId) {
  var recipientEmail = 'lventeria@kons.md'; // 设置收件人邮箱
  var ccEmails = ['rieenteria@gmail.com', 'enteriamarilou@gmail.com', 'reyenteria@gmail.com'];

  var titleParts = eventTitle ? eventTitle.split(' ') : [];
  var subject = 'BLAST REMINDER: ' + titleParts[0] + ' - ' + titleParts[1] + ' - ' + columnHData;

  // 将日期转为可读格式
  var formattedDateTime = startDateTime.toLocaleString();
  
  var body = '**FOR BLASTING:**\n\n' +
             '**Channel and Promo:** ' + eventTitle + '\n' +
             '**Blasting Date and Time:** ' + formattedDateTime + '\n\n'  +
             '**Spiels and Segments:**\n' + notes;

  MailApp.sendEmail({
    to: recipientEmail,
    cc: ccEmails.join(','),
    subject: subject,
    body: body,
    htmlBody: body // 直接放在顶层,无需嵌套options
  });

  var ui = SpreadsheetApp.getUi();
  ui.alert('事件已创建', '日历事件已成功创建,日历ID: ' + calendarId, ui.ButtonSet.OK);
}

关键修改点说明

  • 嘉宾参数格式修正:将addGuests数组通过join(',')转为逗号分隔的字符串,符合CalendarApp对guests参数的格式要求。
  • 变量名冲突解决:将原代码中重名的event变量改为eventConfig和createdEvent,避免变量覆盖导致的逻辑错误。
  • 优化事件获取方式:直接使用createEvent返回的事件对象,无需再通过getEvents搜索,提升效率并避免搜索匹配失败的问题。
  • 日期格式优化:将startDateTime转为本地化可读字符串,避免邮件中显示原始Date对象的生硬格式。
  • 邮件参数修正:MailApp的htmlBody无需嵌套在options中,直接作为顶层参数传入即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 09:06:03