AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 79584437
Accepted
Nic Buchanan
Nic Buchanan
Asked: 2025-04-21 18:37:32 +0800 CST2025-04-21 18:37:32 +0800 CST 2025-04-21 18:37:32 +0800 CST

异常:参数(String、String、null、(class))与 CalendarApp.Calendar.createEvent 的方法签名不匹配

  • 772

我正在尝试创建一个 Google 表格,以便可以安排车间服务日历。

我已按照以下教程操作,但遇到了一些错误,希望有人能够轻松识别错误。

https://www.youtube.com/watch?v=fAfomDR0pe4&list=PL3ooKofg5LEr7yYPz7DyReKrAhhBecfUv

出现这个错误,我尝试查找原因,但一头雾水。我已将开始时间和结束时间格式化为“日期时间”,并尝试删除所有单元格,只保留我输入的内容。我想可能是我输入的范围有误?我不确定……

异常:参数(String、String、null、(class))与 CalendarApp.Calendar.createEvent 的方法签名不匹配。

脚本代码如下:

let calendarId = '[email protected]'; // add your calendar id here

// if your events are coming through but the time is off, click on the gear icon to the left and make sure the time zone matches the time zone setting on your Google Calendar

// on open script menu
function onOpen() {
    let ui = SpreadsheetApp.getUi();
    ui.createMenu("Chur Bro").addItem("Update Calendar", "updateCalendar").addToUi();
}

// main function will irterate through data and determine if we are adding, updating or deleting an event.
function updateCalendar() {
    let ss = SpreadsheetApp.getActiveSpreadsheet();
    let sheet = ss.getSheetByName("Service Register");
    let events = sheet.getRange(9,13,sheet.getLastRow()-1,24).getValues();

    for (i = 0; i < events.length; i++) {
        let event = events[i];
        let returnedData;

        if (event[0] != '') {
            switch (event[0]) {
                case 'Add':
                    returnedData = addEvent(event)
                    break;
                case 'Update':
                    returnedData = updateEvent(event);
                    break;
                case 'Delete':
                    returnedData = deleteEvent(event);
                    break;
            }
            sheet.getRange(i + 9, 21, 9, ).setValues([returnedData]);
        }
    }
    sheet.getRange(9, 13, sheet.getLastRow()-1, 13).clearContent();
}


function addEvent(event) {

  let title = event[17];
  let description = event[18];
  let location = event[19];
  let emails = event[20];
  let startTime = event[23]
  let endTime = event[24]
  let options = {};

  if (description != '') { options['description'] = description; }
  if (location != '') { options['location'] = location; }
  if (emails != '') { options['guests'] = emails; }

  let calendar = CalendarApp.getCalendarById(calendarId);
  let id = calendar.createEvent(title, startTime, endTime, options).getId();
  return ["Added", id];

}




function updateEvent(event) {

    let title = event[17];
    let description = event[18];
    let location = event[19];
    let emails = event[20];
    let eventId = event[22];
    let startTime = event[23];
    let endTime = event[24];

    let calendar = CalendarApp.getCalendarById(calendarId);
    let thisEvent = calendar.getEventById(eventId);
    thisEvent.setTime(startTime, endTime)
        .setTitle(title)
        .setDescription(description)
        .setLocation(location);

    if (emails != '') {
        emails = emails.split(",");
        emails.forEach(x => thisEvent.addGuest(x));
    }
    return ["Modified", eventId];
}




function deleteEvent(event) {

    let eventId = event[22];
    let calendar = CalendarApp.getCalendarById(calendarId);
    let thisEvent = calendar.getEventById(eventId);
    thisEvent.deleteEvent();
    return ['Deleted', ''];

}

Google Sheet 的图片:

Google 表格

google-sheets
  • 1 1 个回答
  • 79 Views

1 个回答

  • Voted
  1. Best Answer
    EL SRY
    2025-04-21T21:08:47+08:002025-04-21T21:08:47+08:00

    异常:参数(String、String、null、(class))与 CalendarApp.Calendar.createEvent 的方法签名不匹配。

    根据您提供的数据集图像,您似乎遇到了此错误,因为它应该获取值的范围不正确,这导致您当前的脚本无法充分满足方法createEvent所需的参数。

    请仔细阅读并研究getRange(row, column, numRows, numColumns)的官方文档,因为您的所有问题都与此方法有关。理解此方法后,它将极大地帮助您理解电子表格的范围及其索引。

    注意:还有getRange(a1Notation)方法可以让您在学习时更容易理解和实现,但请注意,该方法有一些限制。

    为了获取不带标题的数据集的所有值,您可以使用以下 R1C1 范围:

    var events = sheet.getRange(9,13,sheet.getLastRow()-8,12).getValues(); 
    

    我已尝试复制您当前的脚本和数据集,以修复范围内的问题。这是我的工作脚本,您可以参考并指出您的大部分问题。如果存在错误或需要更正的地方,请随意试用并调整范围。

    function myFunction() {
      let ss = SpreadsheetApp.getActiveSpreadsheet();
      let sheet = ss.getSheetByName("Service Register");
      var events = sheet.getRange(9,13,sheet.getLastRow()-8,12).getValues();
    
        for (i = 0; i < events.length; i++) {
            let event = events[i];
            let returnedData;
    
            if (event[0] != '') {
                switch (event[0]) {
                    case 'Add':
                        returnedData = addEvent(event)
                        break;
                    case 'Update':
                        returnedData = updateEvent(event);
                        break;
                    case 'Delete':
                        returnedData = deleteEvent(event);
                        break;
                }
                sheet.getRange(i + 9, 21, 1, 2).setValues([returnedData]);
            } 
        }
        sheet.getRange(9, 12, sheet.getLastRow()-8, 1).clearContent();
    }
    function addEvent(event) {
    
      let title = event[4];
      let description = event[5];
      let location = event[6];
      let emails = event[7];
      let startTime = event[10]
      let endTime = event[11]
      let options = {};
    
      if (description != '') { options['description'] = description; }
      if (location != '') { options['location'] = location; }
      if (emails != '') { options['guests'] = emails; }
    
      let calendar = CalendarApp.getCalendarById(calendarId);
      let id = calendar.createEvent(title, startTime, endTime, options).getId();
      console.log(id);
      return ["Added", id];
    }
    
    

    M8:X11这是我在一定范围内用来集成我的脚本的 Google Sheet 示例数据集。

    行动 日期 开始时间 结束时间 标题 描述 地点 电子邮件 当前状态 事件 ID 开始时间(UTC) 结束时间(UTC)
    添加 2025年4月23日 上午 7:00 上午10:00 标题1 des1 loc1 [电子邮件保护] 额外 [电子邮件保护] 2025年4月23日 7:00:00 2025年4月23日 10:00:00
    添加 2025年4月24日 上午 8:00 上午10:00 标题2 des2 loc2 [电子邮件保护] 额外 [电子邮件保护] 2025年4月24日 8:00:00 2025年4月24日 10:00:00
    添加 2025年4月25日 上午 8:00 上午10:00 标题3 des3 loc3 [电子邮件保护] 额外 [电子邮件保护] 2025年4月25日 8:00:00 2025年4月25日 10:00:00

    如果您打算了解和研究电子表格的范围和索引,您可以随时使用这些调试方法:

    console.log();
    Logger.log();
    

    .getValues()如果您在电子表格中拥有值,并且在调试方法中使用该方法,那么您也可以更轻松地指出。

    例子:

    var events = sheet.getRange(9,13,sheet.getLastRow()-8,12).getValues();
    console.log(events); //or Logger.log(events[0]); change the element inside the events to understand indexing 
    
    
    • 0

相关问题

  • 如何计算两列中两个单元格匹配但不为空白的实例数?

  • 在谷歌表格中使用谷歌财务公式时如何自动化交换部分?

  • 需要帮助:创建匹配数据超链接的公式疑难解答

  • 如何使用查询根据多个复选框和下拉菜单进行过滤?

  • 使用 App 脚本检查单元格值与范围的比较

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve