Google apps script 从共享日历导出所有事件,包括非所有者添加的事件
我正试图将谷歌日历事件数据提取到一个电子表格中,这是可行的。但是,我使用的代码仅导出由Google帐户/日历所有者创建的数据,而不是其他用户添加的事件 下面是我用来访问日历和检索事件详细信息的一些代码的示例 是否有任何方法可以通过所有用户添加的详细信息来实现上述目标Google apps script 从共享日历导出所有事件,包括非所有者添加的事件,google-apps-script,google-calendar-api,Google Apps Script,Google Calendar Api,我正试图将谷歌日历事件数据提取到一个电子表格中,这是可行的。但是,我使用的代码仅导出由Google帐户/日历所有者创建的数据,而不是其他用户添加的事件 下面是我用来访问日历和检索事件详细信息的一些代码的示例 是否有任何方法可以通过所有用户添加的详细信息来实现上述目标 var cal = CalendarApp.getCalendarById("name of calendar"); var events = cal.getEvents(new Date("18/08/2018 12:00 AM"
var cal = CalendarApp.getCalendarById("name of calendar");
var events = cal.getEvents(new Date("18/08/2018 12:00 AM"), new Date("30/08/2018 12:00 AM"))
编辑:
除了我原来的帖子,这可能会有所帮助
谢谢你到目前为止的回复。。。我不完全确定刚才引用的代码中发生了什么,下面是我的完整函数。如果我举一个实际的例子来说明我正在尝试做什么,这也可能会有所帮助
仓库每天进出多个托盘。这些不同输入/输出的详细信息作为事件添加到输入和输出日历中。每种操作类型一个日历。仅在标题部分输入详细信息,例如采购订单号等,并指定时间。我的想法是将托盘的数量放入描述部分,这样当我们将事件提取到电子表格中时,我们就可以得到每天、每小时进出托盘的数量
function goodsin() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var cal = CalendarApp.getCalendarById("name of calendar");
var events = cal.getEvents(new Date("18/08/2018 12:00 AM"), new Date("30/08/2018 12:00 AM"));
for (var i = 0; i < events.length; i++) {
var title = events[i].getTitle();
var sd = events[i].getStartTime();
var ed = events[i].getEndTime();
var des = events[i].getDescription();
ss.getRange(i+2, 1).setValue(title)
ss.getRange(i+2, 2).setValue(sd);
ss.getRange(i+2, 2).setNumberFormat("dd/mm/yyyy h:mm:ss AM/PM")
ss.getRange(i+2, 3).setValue(ed);
ss.getRange(i+2, 3).setNumberFormat("dd/mm/yyyy h:mm:ss AM/PM")
ss.getRange(i+2, 4).setValue(des);
}
}
我无法复制你的问题 默认日历中的事件 使用帐户A,我在其默认日历上创建了一个事件,并邀请了帐户B。帐户B未接受邀请 从帐户B,如果我运行以下代码,我将在Stackdriver日志中获取事件信息:
function getNextEvent_(calendars) {
if (!calendars)
calendars = CalendarApp.getAllCalendars();
const now = new Date();
const end = new Date();
return calendars.map(function (cal) {
var weeks = 4;
end.setTime(now.getTime());
do {
end.setDate(end.getDate() + 7)
var e = cal.getEvents(now, end, {max: 1}).pop();
} while (!e && --weeks);
return cal.getName() + ': ' +
(!e
? 'No visible events up to ' + end.toLocaleString()
: e.getTitle() + ' (Org. by ' + e.getCreators().join(',') + ')'
);
});
}
function logNextEvents() {
console.log({
message: "Upcoming Events",
events: getNextEvent_()
});
}
如果我深入挖掘,就会找到帐户B的默认日历的事件,即CalendarApp.getDefaultCalendar.getEvents。。。包含由帐户A拥有和组织的事件
共享日历中的事件
设置:
帐户A制作了一个新的谷歌日历。
帐户B被添加为具有更改事件的权限。
帐户C被添加为具有更改事件的权限。
所有帐户都会在日历上创建一个事件3创建的事件。
代码:
案例:
帐户A运行上述代码
帐户B运行上述代码
帐户C运行上述代码
结果:
所有案例都返回3个事件。即使每个帐户a、b、c都编写自己的代码,而不是每个帐户都有一个可以执行的项目,所有查询都是成功的。
关于日历的权限级别、创建事件的帐户、事件的可视性以及执行查询的帐户,您可能没有与我们共享某些内容。您可能需要使用实际的日历API,而不仅仅是日历服务CalendarApp。你有没有仔细研究过CalendarApp方法,看看它们中是否有哪一种更接近于提供或建议类似于你所要求的东西?因为对我来说,知道你正在参加或被邀请参加的活动应该是可以询问的…谢谢你的回复。我已经查看了网页上的列表,看看是否有任何描述与我所寻找的相符,但由于我对这一点有点陌生,没有任何东西跳出来告诉我。。某些方法具有选项,但位于[]字段中。但是我不确定在争论中有什么选择。。。
function querySharedCal() {
const id = 'notarealgroupid@group.calendar.google.com';
const cal = CalendarApp.getCalendarById(id);
if (!cal) throw new Error("no calendar");
const now = new Date();
const end = new Date();
end.setDate(end.getDate() + 4);
const events = cal.getEvents(now, end).map(function (e) {
return cal.getName() + ': ' + e.getTitle() +
' (Org. by ' + e.getCreators().join(',') + ')';
});
console.log({message:"search result by " + Session.getTemporaryActiveUserKey(), events: events});
}