- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
第一次在这里提问。
我已经构建了一个 Google App 脚本,它根据 @Mogsdad's answer here 从 Google 表格中获取事件信息并在 Google 日历上创建事件。 . (由于我不存在的声誉,我无法在该线程上发布问题)
“exportEvents”功能第一次运行得很好。但是一旦电子表格有更多行信息,它并没有完成脚本而是说 “您在短时间内创建或删除了过多的日历或日历事件。请稍后再试。”
这不是因为 Google 设置了每日配额,因为我每天没有创建接近 10,000 个事件。我搜索了一个解决方案,并找到了 this on Google Product Forum作者@JEvans-GSA,他的脚本像我一样基于@Mogsdad 的脚本。
我调整了他的解决方案并将“updateEvents”函数与“exportEvents”分开(并创建了“deleteEvents”函数)。现在“exportEvents”不会遇到“您在短时间内创建或删除了太多日历或日历事件。请稍后再试”的问题。 但是“updateEvents”在执行到一半时仍然收到相同的警告!
//Global settings
var calId = 'n02m72vanqabnt1gcjluk2vosk@group.calendar.google.com';
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 个事件)并且没有错误消息。我将调整这个时间,看看我是否可以减少 sleep 时间。这是 Google 开发人员引用信息:
https://developers.google.com/apps-script/reference/utilities/utilities#sleep(Integer)
关于google-apps-script - 错误 : "You have been creating or deleting too many calendars or calendar events in a short time.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29308656/
也许是一个愚蠢的问题,但我有一个在 Java 文档中没有找到的问题。 Calendar.get(Calendar.DAY_OF_WEEK) 的值是否会根据 Calendar.getFirstDayOf
假设以下代码在 2009 年 8 月 22 日(星期六)执行 Calendar c = Calendar.getInstance(); c.set(Calendar.DAY_OF_WEEK
我正在使用以下代码检查所选月份是否为一月: if (calendar.get(Calendar.MONTH) == Calendar.JANUARY) { ... } 这给了我一个 lint
我有两个 Calendar 变量,分别命名为 calendar1 和 calendar2 其中存储了一些日历值。 我想比较这些变量的 MINUTE 值。 我找到了两种方法,但我想知道有什么区别以及哪一
根据文档 ( here ),Google 提供了一些相同的范围: https://www.googleapis.com/auth/calendar读/写访问到日历 https://www.google
我想问一下,是否可以在不调用 Google 日历 API(需要互联网连接)或启动 native 日历 Activity (不需要)的情况下添加日历事件?只需将日历事件添加到设备 native 日历中(
我们可以从谷歌日历设置中获取工作时间数据吗?我已经了解了日历的 API : https://developers.google.com/calendar/v3/reference/settings/g
我正在尝试使用 Exchange Web 服务访问日历数据,但我似乎无法弄清楚如何访问其他用户共享的日历(当它不是他们的默认日历时)。假设我公司的另一个用户创建了一个共享日历并与我共享,我什至找不到日
我对 Java/Android 中的日期比较有点困惑 DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm");
我正在使用Google的Calendar API,但遇到了一个问题。当我设置要插入的事件的dateTime时,需要设置小时偏移量,但是由于o DST的原因,它需要一个小时。我可以为日历设置一个属性,以
在Google日历的常规网络用户界面中,当我添加事件时,可以选择将其设置为“提醒”,而不是“事件”。 我正在尝试使用Python API进行复制,但是似乎找不到有关如何执行该操作的信息。我找到的所有文
我们可以使用这个link通过参数向Google日历添加新事件 https://www.google.com/calendar/render? action=TEMPLATE& text=EventNa
除了在纪元显式设置它们之外,是否有任何现有方法可以使用日历 API 来获取填充纪元时间的日历?我所能做的就是获取当前时间。 最佳答案 没有预定义的构造函数或工厂方法来执行此操作,但它相当简单: Cal
我试图在我的应用程序上次更新时显示在 TextView 中(例如,“上次更新时间为 12:13”)。我正在尝试使用 Calendar 实例,我认为我理解正确,但我似乎遇到了麻烦. 我知道要获取一个实例
这个问题在这里已经有了答案: Calendar.before(Object when), why Object? (3 个答案) 关闭 8 年前。 我遇到了问题,因为我试图将日期传递给 Calend
在IOS5上使用获取所有日历时 EKEventStore *eventStore = [[EKEventStore alloc] init]; NSArray * calendars = [event
当我运行以下代码时: int year = 2017; int month = 7; int dayOfMonth = 10; Calendar dateOfBirth = new Gregorian
要么我不理解方法 getActualMaximum(int) 或字段 WEEK_OF_YEAR,要么涉及 Sun 错误(或所有三个)...有人可以向我解释为什么(至少在德语语言环境中...) 以下代码
我正在检查我几年前写的代码。然后我意识到 Android Studio 在 Calendar.AM 处给出了注释,它说它必须是 Calendar.SUNDAY、Calendar.MONDAY 之一等等
我需要将给定日期复制 100 次(我无法通过引用传递)。我想知道以下两个中哪个是更好的选择 newTime=Calendar.getInstance().setTime(originalDate);
我是一名优秀的程序员,十分优秀!