错误:“您在短时间内创建或删除了太多日历或日历事件。”

2023-11-22

第一次在这里提问。

我构建了一个 Google 应用程序脚本,它从 Google 表格获取事件信息,并基于以下内容在 Google 日历上创建事件:@Mogsdad 的回答在这里。 (由于我不存在的声誉,我无法在该线程上发布问题)

“exportEvents”函数第一次运行得非常好。但是,一旦电子表格有了更多行信息,它就没有完成脚本,而是说“您在短时间内创建或删除了太多日历或日历事件。请稍后再试。”

这不是由于 Google 设置的每日配额造成的,因为我每天不会创建接近 10,000 个事件。我寻找解决方案,发现此内容位于 Google 产品论坛上作者是 @JEvans-GSA,他的脚本是基于像我一样的 @Mogsdad 的脚本。

我改编了他的解决方案,并将“updateEvents”函数与“exportEvents”分离(并且还创建了“deleteEvents”函数)。现在,“exportEvents”不会遇到“您在短时间内创建或删除了太多日历或日历事件。请稍后重试”的问题。但是“updateEvents”在执行中途仍然收到相同的警告!

  • 例如,我创建了 83 个标题为“1”到“83”的事件,并导出了 事件成功添加到日历。
  • 然后我将事件标题更改为“100”到“182”并尝试更新事件。
  • 它只是将“1”~“15”更新为“101”~“114”,其他一切保持不变。 - 我使该函数将“状态”列更新为“已更新(今天的 date)”,也没有执行。

所以函数开始但没有完成,这让我认为错误一定是在设置重复发生的某个地方。是否有解决方法可以使“updateEvents”工作,或者作为@Mogsdad 在原始答案中建议,是删除和重新创建事件的唯一其他方法吗?

预先感谢您的任何帮助。以下是我的电子表格的链接(由于我的代表程度较低,我不允许使用超过 2 个链接):-https://docs.google.com/spreadsheets/d/1V6eioCo4QDPO2DdCyW93sLRWT_xtzKM-drDPVI1Gd8s/edit?usp=sharing

我当前的脚本:

//Global settings
var calId = '[email protected]';
var moderatorEmail = 'EMAIL_ADDRESS';

var idId = 0;
var startTimeId = 1;
var endTimeId = 2;
var titleId = 3;
var organizerId = 4;
var locId = 5;
var descId = 6;
var urlId = 7;
var topicId = 8;
var typeId = 9;
var contactId = 10;
var contactEmailId = 11;
var actionId = 12;
var statusId = 13;

//Add a custom menu
function onOpen() {
  var ss = SpreadsheetApp.getActive();
  var items = [
    {name: 'Export Events', functionName: 'exportEvents'},
    {name: 'Update Events', functionName: 'updateEvents'},
    {name: 'Delete Events', functionName: 'deleteEvents'}
  ];
  ss.addMenu('Calendar', items);
}

//Actual functions
function exportEvents() {
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var headerRows = 2; //Number of rows of header info to skip
  var range = spreadsheet.getDataRange();
  var data = range.getValues();
  var cal = CalendarApp.getCalendarById(calId);
  for (i in data) {
    if (i < headerRows) continue; //Skip header rows
    var row = data[i];
    var title = row[titleId];
    var tstart = new Date(row[startTimeId]);
      tstart.setDate(tstart.getDate());
      tstart.setMonth(tstart.getMonth());
      tstart.setYear(tstart.getYear());
      tstart.setTime(tstart.getTime());
    var tstop = new Date(row[endTimeId]);
      tstop.setDate(tstop.getDate());
      tstop.setMonth(tstop.getMonth());
      tstop.setYear(tstop.getYear());
      tstop.setTime(tstart.getTime());
    var loc = row[locId];
    var contact = row[contactId];
    var organizer = row[organizerId];
    var topic = row[topicId];
    var type = row[typeId];
    var contactEmail = row[contactEmailId];
    var url = row[urlId];
    var status = row[statusId];
    var desc = (row[descId]
        +"\n\n-Organizer: "+organizer
        +"\n-Event URL: "+url
        +"\n-Event Type: "+type
        +"\n-Event Contact: "+contact+" ("+contactEmail+")")
    var id = row[idId];
    // Check if the event already exists, update it if it does
    try {
      var event = cal.getEventSeriesById(id);
    }
    catch (e) {
    // Do nothing - we just want to avoid the exception when event doesn't exist
    }

    if (!event) {
      //cal.createEvent(title, new Date("Month D, YYYY 00:00:00"), new Date("Month D, YYYY 00:00:00), {description:desc,location:loc});
      var newEvent = cal.createEvent(title, tstart, tstop, {description:desc,location:loc}).getId();
      row[idId] = newEvent; // Update the data array with event ID 

      var d = new Date();
      var time = d.getMonth()+1 + "/" + d.getDate() + "/" + d.getFullYear()
      row[statusId] = "Exported " + time
      }
    debugger;
  }
  range.setValues(data);
}

function updateEvents() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var headerRows = 2; //Number of rows to skip
  var range = sheet.getDataRange();
  var data = range.getValues();
  var cal = CalendarApp.getCalendarById(calId);
  for (i in data) {
    if (i < headerRows) continue;
    var row = data[i];
    var title = row[titleId]; //Second column
    var tstart = new Date(row[startTimeId]);
      tstart.setDate(tstart.getDate());
      tstart.setMonth(tstart.getMonth());
      tstart.setYear(tstart.getYear());
      tstart.setTime(tstart.getTime());
    var tstop = new Date(row[endTimeId]);
      tstop.setDate(tstop.getDate());
      tstop.setMonth(tstop.getMonth());
      tstop.setYear(tstop.getYear());
      tstop.setTime(tstart.getTime());
    var loc = row[locId];
    var contact = row[contactId];
    var organizer = row[organizerId];
    var topic = row[topicId];
    var type = row[typeId];
    var contactEmail = row[contactEmailId];
    var url = row[urlId];
    var action = row[actionId];
    var status = row[statusId];
    var desc = (row[descId]
        +"\n\n-Organizer: "+organizer
        +"\n-Event URL: "+url
        +"\n-Type: "+type
        +"\n-Event Contact: "+contact+" ("+contactEmail+")")
    var id = row[idId];
    try {
      var event = cal.getEventSeriesById(id);
    }
    catch (e) {
      // do nothing
    }
    if (event) {
      if (action === "Update") {
        event.setTitle(title);
        event.setDescription(desc);
        event.setLocation(loc);
      // eventSetTime(tstart, tstop); // cannot setTime on eventSeries.
      // ... but we Can set recurrence!
        var recurrence = CalendarApp.newRecurrence().addDailyRule().times(1);
        event.setRecurrence(recurrence, tstart, tstop);

        var d = new Date();
        var time = d.getMonth()+1 + "/" + d.getDate() + "/" + d.getFullYear()
        row[statusId] = "Updated " + time
      }
    }
  }
  debugger;
  range.setValues(data);
}


function deleteEvents() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var headerRows = 2; //Number of rows to skip
  var range = sheet.getDataRange();
  var data = range.getValues();
  var cal = CalendarApp.getCalendarById(calId);
  for (i in data) {
    if (i < headerRows) continue;
    var row = data[i];
    var action = row[actionId];
    var status = row[statusId];
    var id = row[idId];
    try {
      var event = cal.getEventSeriesById(id);
    }
    catch (e) {
    }
    if (event) {
      if (action === "Delete") {
        event.deleteEventSeries();

        var d = new Date();
        var time = d.getMonth()+1 + "/" + d.getDate() + "/" + d.getFullYear()
        row[idId] = "Deleted";
        row[statusId] = "Deleted " + time;
      }
    }
  }
  debugger;
  range.setValues(data);
}

在工作日创建日历事件块的脚本也有类似的问题,仅使用嵌套的 while 循环。我插入了 Utilities.sleep(3000),以便脚本每 10 次迭代后暂停一次。我对其进行了 20 周的测试,每周创建 20 个事件(400 个事件),并且没有错误消息。我将尝试一下这个时间,看看是否可以减少睡眠时间。以下是 Google 开发者参考信息:

https://developers.google.com/apps-script/reference/utilities/utilities#sleep(整数)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误:“您在短时间内创建或删除了太多日历或日历事件。” 的相关文章

  • 自动从外部数据库加载 Google 电子表格数据

    我有一个共享的 Google 电子表格 工作表的某些列必须填充数据库服务器 PostgreSQL 中存在的数据 SQL 查询 此外 数据加载必须安排为自动完成 例如每天 1 点 最后 我需要在电子表格中进行一些调整 例如 加载后将日期时间放
  • 仅生成一张电子表格的 PDF

    我需要一个只用一张电子表格创建 PDF 的脚本 我目前有一个生成 PDF 的脚本 但它处理整个文件 我无法将这些值复制到另一个文件 因为我需要导出的工作表是带有从另一个工作表中提取的数据的图形 你可以帮帮我吗 谢谢 function myF
  • 如何过滤视图两列 OR 而不是 AND?

    在 Google 表格中 我想过滤查看结果 以便仅显示 D 列和 或 E 列中带有 x 的行 如果我过滤以显示其中包含 x 的列 则它将仅显示 D 列和 E 列中包含 x 的行 我如何让它做 和 或 操作 当我单击列中的过滤器按钮时 它只会
  • 如何设置多个过滤器?

    我有一个关于将过滤器应用于多个值以使用 Google 脚本隐藏它们的问题 我有一个具有多种状态的项目跟踪器 例如 达到目标 已完成 已取消 已延迟 等 我想编写一个脚本来设置 状态 列的筛选器值 以便标记为 已完成 或 的行 已取消 被隐藏
  • ReferenceError:未定义 ConferenceDataService

    我正在尝试开发像 Zoom 会议这样的谷歌日历插件 在 appsscript json 文件中 有以下代码 calendar conferenceSolution onCreateFunction createConference id 1
  • ChartRangeFilter 作为谷歌时间轴图表的缩放功能,可使用数据视图从专用谷歌电子表格中读取数据

    我的目标是整合Whitehat 提供的这种缩放功能 https stackoverflow com questions 49306638 google timeline visualization dont change series ro
  • 如何使用 Google 脚本将数据添加到 Google 表格中的特定行

    在我的 Google 表格中 我将索引放在名为 colorRow 的变量中 我只是想向工作表中的该行添加一些数据 但数据不断进入页面下方的其他行 我究竟做错了什么 var data Some more fields in data arra
  • 将 Google 电子表格解析为 Javascript 数组

    我有一个 Google 电子表格 https docs google com spreadsheets d e 2PACX 1vRc8Lx0N wf3f1xAAXkNFUqQjaWPFcde3YjK02gCBqGpUrULwHC6NC0sn
  • 将 JSON 数据导入 Google 表格

    我从 Web 服务中提取数据 其格式为 JSON 我正在为 Google Sheets 编写一个 Google Apps 脚本 它将为我填充数据 我的问题是 我似乎无法解析它 Doing var dataset myJSONtext Bro
  • 如何从谷歌表格下载 PNG 图表

    我试图在 Google Sheet 中创建一个自定义菜单 以允许我将当前 Google Sheet 文件中所有工作表中的所有图表下载到 PNG 图像中 使用图表标题作为图像名称 保存到我的 Windows PC 的默认下载目录中 我打算使用
  • 引入 V8 后,Google Apps 脚本无法为其他用户完全执行

    我编写了一个脚本 得到了这里好心人的大力帮助 该脚本使用 Google Sheets 脚本复制 Google Drive 上的文件夹 和内容 它运行了很长一段时间 但后来我启用了 V8 引擎 现在已禁用 问题是 它仍然适用于我 也许还有其他
  • Google Apps脚本:从文件中获取文件夹名称

    在谷歌应用程序脚本中我有这个代码 var files DriveApp searchFiles modifiedDate gt 2013 02 28 and title contains untitled while files hasNe
  • Google Apps 脚本 - 脚本之间的通信

    Hi我的问题如下 我想创建一个小网页 在该网页上可以在 Google 日历中创建事件 但有一些限制 就我而言 我的室友可以编辑此日历来预订洗衣机 该预订不能重叠 而且我们所有人的使用天数都是有限的 我创造了私人日历 我已经创建了验证请求的脚
  • Google 表格 - 提取数字及其测量单位

    我想要一个可以从文本中提取数字及其测量单位的函数 例如在 A2 中我有 这个盒子重5公斤 另一个盒子重10公斤 所以我想要一个会返回的函数 5kg 10kg 注意 我希望该函数适用于任何测量单位 而不仅仅是 kg 我是谷歌表格的初学者 因此
  • 在 Google 日历 API 中开会

    如何在java中的google calendar api中添加google meet 请帮我 我还没看懂谷歌文档 https developers google com calendar create events https develo
  • Google Visualization 无法与 appscript html 服务配合使用

    我想将 appscript htmlservice 与 appscript 一起使用 html 服务似乎可以工作 但可视化不起作用 这是供参考的代码 代码 GS Script as app template function doGet r
  • 如何删除“其他用户”可安装触发器?

    有没有办法删除 其他用户 可安装的触发器 足够幸运地猜测要删除哪个用户只会显示他们的触发器已禁用 但仍然需要您登录他们的 Gmail 才能删除它 当您是电子表格的 所有者 时 这有点令人担忧 您无法删除其他用户的触发器 脚本的触发器与用户的
  • 将 IMPORTXML Xpath 查询格式化为 Google 表格的可读数据

    我正在将 XML 数据导入到具有以下结构的 google 工作表中 编辑 网址 https sonicstate com news tools revive stats client camp 3785 xml https sonicsta
  • 用于更改 Google 文档中文档所有者的脚本

    StackOverflow 和 Google Apps 脚本的新增功能 我感谢任何帮助 指导 任务 我正在尝试编写一个 Google Apps 脚本 它将指定文件夹中所有文件的所有权转移给一个所有者 我是 Google Apps Premi
  • 通过服务帐户使用高级 Google 服务

    我正在使用 Google Apps 脚本并使用一些高级服务 例如 Admin SDK 目录 API 和经销商 API 开发应用程序 看起来这些 API 是由我的 Web 应用程序在访问我的 Web 应用程序的用户上下文中调用的 它是通过 以

随机推荐

  • 如何在 numpy 和 R 之间传递大型数组?

    我正在使用 python 和 numpy scipy 为文本处理应用程序执行正则表达式和词干提取 但我也想使用 R 的一些统计包 将数据从 python 传递到 R 的最佳方法是什么 然后回来 另外 我需要在某个时候将数组备份到磁盘 所以如
  • 有没有办法让SCNNode总是在其他节点前面?

    我一直在尝试使用场景套件制作一个场景 其中指定的对象始终位于其他对象的前面 尽管事实上它实际上位于其他对象的后面 与此类似的效果用于blender 显然 搅拌机使用 GUI 和大量数学来转换 2D 对象 但我需要在具有 SCNGeometr
  • 如何在 Rails 应用程序中运行 rake 任务

    我想做的事 在 model rb 中 在 after commit 中 我想运行 rake 任务 ts reindex ts reindex 通常与 rake 一起运行 ts index 如果您希望此 rake 代码在请求周期内运行 那么您
  • 如何从 Chrome 扩展程序打开 mailto: 链接?

    我有一个名为 URL 缩短 的 Chrome 扩展程序Shrtr 目前 它允许用户将缩短的 URL 复制到剪贴板 但在下一个版本中 我添加了使用电子邮件发送缩短的 URL 的功能mailto 链接 即mailto subject
  • Django 添加占位符到 django 内置登录表单

    我正在使用 django 内置登录forms我想在用户名和密码中添加占位符 我的模板 div class form group div class col md 12 form username add class form control
  • Android Market - 上传 APK 文件时出错

    刚才我已经开发了一个应用程序 现在我准备将其上传到Android市场 但是当我尝试上传时 它显示以下错误消息 市场不接受使用调试证书签名的 apk 创建有效期至少 50 年的新证书 Market 要求用于签署 apk 的证书至少在 2033
  • 序列化 .net 对象并省略文档类型?

    我编写了一些 net 代码来使用 XMLSerializer 类序列化对象 public static string serialize object o Type type o GetType System Xml Serializati
  • Jquery - 不可滚动 div 上的滚动事件

    example http jsbin com ofiy 2 edit preview 我尝试用不可滚动的div 绿色的 滚动一个div 红色的 我的问题是 当我在绿色 div 上滚动时 jqueryscroll 不着火 HTML div s
  • 当 rpm 文件中存在用于 rpm 安装的“缺少”lib 时

    我正在为 centos 生成一个 rpm 文件 但是当我尝试在干净的机器上安装它时 它失败了 gt Running transaction check gt Package grass x86 64 0 6 4 4 1 el6 will b
  • Facebook 登录无法在 Safari/ iPhone 中打开

    我正在创建一个显示 Facebook 好友的应用程序 首先 用户需要单击登录按钮 然后在填写登录 ID 和密码后会出现一个简单的弹出屏幕 其中将显示好友列表 一切正常 可以在 Firefox Chrome IE 上运行 但不会在 Safar
  • Apache POI - 使用 XSSFWorkbok + servlet 响应

    我的 java 应用程序在启用下载 XLSX 文件时遇到问题 按照此链接中显示的示例 使用 Apache POI 创建 excel 文件供用户下载 我尝试了两种配置来下载 保存电子表格 首先使用 XLS 文件 response setCon
  • Java/JavaScript 日期:这是真的吗?

    假设用户在与应用程序服务器不同的时区通过浏览器运行我的 Web 应用程序 我使用 JavaScript 在客户端序列化日期date getTime 方法 我通过 Json 发送结果毫秒 然后通过调用在服务器端创建一个 Java Date 对
  • UITextField - 仅允许数字和标点输入/键盘

    我已经尝试过下面的代码 但只允许输入键盘上的数字 我的应用程序要求键盘使用句号 句号 用于金钱交易 我尝试的代码是 BOOL textField UITextField textField shouldChangeCharactersInR
  • Spark 作业因 java.io.NotSerializedException: org.apache.spark.SparkContext 失败

    当我尝试应用方法 ComputeDwt 时 我遇到了上述异常RDD Int ArrayBuffer Int Double 输入 我什至正在使用extends Serialization在 Spark 中序列化对象的选项 这是代码片段 inp
  • 将 MvxCommand 与 CommandParameter 绑定结合使用

    我正在尝试用火MvxCommand 与 CommandParameter 但面临以下问题 MyView axml 包含
  • 如何在 XCode 中使用 ARM 汇编器?

    出于教育目的 我想向现有的 iPhone 应用程序添加一个用 ARM 汇编语言编写的函数 一般来说 我不需要 ARM 汇编教程 因为我已经读了太多了 我只是不知道如何实际运行代码 我想做的是这样的 无用 h void useless 无用
  • 无法将图像渲染到 HttpContext.Response.OutputStream

    基本上我试图在 ASP NET 处理程序中渲染一个简单的图像 public void ProcessRequest HttpContext context Bitmap image new Bitmap 16 16 Graphics gra
  • Android:根据给定的 id 获取列表视图中项目的位置:

    getItemIdAtPosition 是android中的一个函数 用于获取列表视图中给定项目的位置的id 有什么方法可以做相反的事情 即获取项目的位置是给定其 id 的列表视图吗 不可以 你必须手动完成 在您正在使用的适配器中创建一个公
  • 使用 linq 按范围分组[重复]

    这个问题在这里已经有答案了 我们如何使用等于或大于的分组范围 var data new new Id 0 Price 2 new Id 1 Price 10 new Id 2 Price 30 new Id 3 Price 50 new I
  • 错误:“您在短时间内创建或删除了太多日历或日历事件。”

    第一次在这里提问 我构建了一个 Google 应用程序脚本 它从 Google 表格获取事件信息 并基于以下内容在 Google 日历上创建事件 Mogsdad 的回答在这里 由于我不存在的声誉 我无法在该线程上发布问题 exportEve