电子表格到日历

时间:2017-09-20 19:57:31

标签: google-apps-script

我在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 但我无法弄明白(这是一个不同的剧本)

注意:我删除了所有“日历到电子表格”同步功能 - 我不希望修改日历以影响电子表格。

非常感谢任何帮助!

由于

2 个答案:

答案 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日历中添加了所有事件,并且它没有删除蓝色日历中的事件(就像它应该这样做)。所以我尝试了很多其他组合(在删除日历中的每个事件后)并且找不到逻辑,有时它会将所有事件添加到蓝色日历中,有时将所有事件添加到红色日历中。