我在Google电子表格上管理我的商家预订。我发现了一个很棒的脚本来根据电子表格上的预订来更新我的日历:https://github.com/Davepar/gcalendarsync 所以一行=一个预订=日历中的一个事件。 它工作得很好,但我需要一个新功能。
截至目前,该脚本将更新一个特定日历,我想更新两个单独的日历,具体取决于特定列的值。
实施例: 假设我管理一个豪华轿车业务,我有两个豪华轿车,一个蓝色轿车和一个红色豪华轿车。 我将预订放在工作表中,如果我将指定蓝色或红色豪华轿车,则指定每一行。 我想有两个单独的日历来分别检查每个日历的可用性。
我不是程序员,但我环顾四周,显然这可以通过添加一个函数来轻松完成: “如果列C的值为”蓝色“,则分配此日历ID,如果列C的值为”红色“,则分配此日历ID。” 我只是不知道该怎么做。
所以,这是脚本:https://raw.githubusercontent.com/Davepar/gcalendarsync/master/gcalendarsync.js
据我所知,需要修改的是:
var calendarId = '<your-calendar-id>@group.calendar.google.com';
// Synchronize from spreadsheet to calendar.
function syncToCalendar() {
// Get calendar and events
var calendar = CalendarApp.getCalendarById(calendarId);
if (!calendar) {
errorAlert('Cannot find calendar. Check instructions for set up.');
我换成了:
var calendarId1 = 'calendaridofbluelimo@group.calendar.google.com';
var calendarId2 = 'calendaridofredlimo@group.calendar.google.com';
// Synchronize from spreadsheet to calendar.
function syncToCalendar() {
// Get calendar and events
var calendar = CalendarApp.getCalendarById(calendarId1);
if (!calendar) {
errorAlert('Cannot find calendar. Check instructions for set up.');
我根本没有修改过多,我仍然需要添加确定哪个日历必须修改的功能。
我尝试按照此回复执行此操作:Create events in multiple Google Calendars from Spreadsheet 但我无法弄明白(这是一个不同的剧本)
注意:我删除了所有“日历到电子表格”同步功能 - 我不希望修改日历以影响电子表格。
非常感谢任何帮助!
由于
答案 0 :(得分:0)
您需要一个条件语句来检查Spreadsheet单元格的值。像下面这样的东西可以工作:
var calendarId1 = 'calendaridofbluelimo@group.calendar.google.com';
var calendarId2 = 'calendaridofredlimo@group.calendar.google.com';
function syncToCalendar() {
// Open the Spreadsheet and get the active page.
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// Then, you need to get the data range to use in the conditional.
// This gives you an array you can loop through and test each row.
// For the sake of illustration, we'll say it's in col B
var data = sheet.getRange("B:B").getValues();
// Test each row in the conditional
for(var i=0; i<data.length; i++) {
if(data[i] == "blue") {
var calendar = CalendarApp.getCalendarById(calendar1);
} else if(data[i] == "red") {
var calendar = CalendarApp.getCalendarById(calendar2);
} else if(!data[i]) {
errorAlert('Cannot find calendar. Check instructions for set up.');
}
// rest of your function...
}
答案 1 :(得分:0)
非常感谢您的回答。我测试了你的代码,它似乎不起作用。该脚本有效,但它只会更新第一个日历。 这是我放的代码(红色/蓝色变量在R:R列中)
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = sheet.getRange("R:R").getValues();
// Test each row in the conditional
for(var i=0; i<data.length; i++) {
if(data[i] == "Blue") {
var calendar = CalendarApp.getCalendarById(calendarId1);
} else if(data[i] == "Red") {
var calendar = CalendarApp.getCalendarById(calendarId2);
} else if(!data[i]) {
errorAlert('Cannot find calendar. Check instructions for set up.');
}
}
我测试了一些东西来消除潜在的问题。就像我把B:B(没有Rosa / Negro变量)而不是R:R,并且脚本不起作用。这很好。 此外,更有趣的是,我试图切换两个日历的ID。例如,我有
var calendarId1 = 'calendaridofbluelimo@group.calendar.google.com';
var calendarId2 = 'calendaridofredlimo@group.calendar.google.com';
我说:
var calendarId2 = 'calendaridofbluelimo@group.calendar.google.com';
var calendarId1 = 'calendaridofredlimo@group.calendar.google.com';
发生的事情是它在Red Limo日历中添加了所有事件,并且它没有删除蓝色日历中的事件(就像它应该这样做)。所以我尝试了很多其他组合(在删除日历中的每个事件后)并且找不到逻辑,有时它会将所有事件添加到蓝色日历中,有时将所有事件添加到红色日历中。