对于编程新手来说,当我尝试向下面的脚本添加多个日历 ID 时,我一直在碰壁。 我需要它来遍历行,如果事件尚未添加到日历中,则在工作表更新时将其添加到我的日历和其他人的日历中。
function addToCal() {
var ss = SpreadsheetApp.getActiveSpreadsheet(),
sheet = ss.getSheetByName("ProductionSchedule"),
range = sheet.getActiveRange(),
row = range.getRow(),
data = sheet.getRange(row, 1, 1, 26).getValues(),
date = data[0][6];
if (date =='') return;
var today = new Date(),
startDate = new Date(today.setMonth(today.getMonth()-1)),
endDate = new Date(today.setMonth(today.getMonth()+6)),
calId = 'calendarID',
cal = CalendarApp.getCalendarById(calId),
events = cal.getEvents(startDate, endDate),
titles = [];
for (var i = 0, len = events.length; i < len; i++)
titles.push(events[i].getTitle());
var item = ('Produção de' + ' ' + data[0][3]),
qtd = ('Qtd (und): ' + data[0][5]),
local = ('Local de Produção: ' + data[0][4]);
var index = titles.indexOf(item),
ok = 1;
if (index > -1)
{
var eventDate = events[index].getAllDayStartDate();
if (eventDate.getTime() == date.getTime()) var ok = 0;
else events[index].deleteEvent();
}
if (ok)
cal.createAllDayEvent(item, date, {description: qtd, location: local})
.removeAllReminders();
}
目前,它将事件设置到我的日历中,其中包含项目描述作为事件标题、产品名称、数量和描述字段中的生产地点。我需要将相同的信息添加到其他人的日历中。
此外,这不能将我标记为忙碌,并且该活动不需要是全天活动。
如有任何帮助,我们将不胜感激。 干杯,
为了重复多个日历的日历交互,您需要创建一个日历 ID 数组并循环访问它们。
一种方法是:
var CALENDER_IDS = [
"calendarID1",
"calendarID2",
"calendarID3",
]
func addToCal() {
... spreadsheet data extraction and date calculations ...
for (var i = 0, clen = CALENDER_IDS.length; i < clen; i++) {
var cal = CalendarApp.getCalendarById(CALENDER_IDS[i]);
... calendar interactions ...
}
}
如果您使用上面的代码,请确保更新标题循环中的计数器变量(即它们都不能是
i
)。 常见的做法是让内循环使用j
、k
等
我提出这篇文章是因为我有一些卷发纠缠的问题。我想从同一帐户检索多个日历的信息。这是我根据您之前的建议得出的代码,但它不起作用。你有什么建议吗?
// Menu et bouton pour l'execution du script
function onOpen(e) {
SpreadsheetApp.getUi()
.createMenu('📅 Import Google Agenda')
.addItem('▶️ Exécuter le script', 'getEvents')
.addToUi();}
// Script pour récupérer les informations des événements entre deux dates
function getEvents() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
var start_time = sheet.getRange("A2").getValue();
var end_time = sheet.getRange("B2").getValue();
var CALENDER_IDS = [
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
]
// Boucle Pour récupérer les ID de Calendrier
for (var i = 0, clen = CALENDER_IDS.length; i < clen; i++) {
var cal = CalendarApp.getCalendarById(CALENDER_IDS[i]);
//var events = cal.getEvents(new Date(start_time), new Date(end_time));
var events = cal.getEvents(new Date(start_time), new Date(end_time));
var calname = cal.getName
Browser.msgBox(calname);
// Boucle pour récupérer les événenements définies entre les deux dates "start_time" et "end_time"
for (var j = 0;j<events.length;j++){
var title = events[j].getTitle();
var start_time = events[j].getStartTime();
var end_time = events[j].getEndTime();
var loc = events[j].getLocation();
var des = events[j].getDescription();
var color = events[j].getColor();
// Récupération des insertions des informations des événements (ordre des colonnes du fichier sheets)
sheet.getRange(j+5,1).setValue(title);
sheet.getRange(j+5,2).setValue(start_time);
sheet.getRange(j+5,3).setValue(end_time);
sheet.getRange(j+5,4).setValue(des);
sheet.getRange(j+5,5).setValue(color);
sheet.getRange(j+5,6).setValue(loc);
}
}
Logger.log("Evénements ajoutés dans le fichier.");
}