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
相关产品推荐
相关产品推荐

