对使用Google电子表格维护/更新Google日历的脚本进行问题排查,包括自动更改颜色

时间:2015-03-17 22:29:49

标签: javascript google-apps-script google-sheets google-calendar-api

我正在尝试编写Google应用脚本来完成以下操作:

  • 根据Google中的几个列更新Google日历 电子表格,表示:

  • 一个。该事件是否具有指定日期(列"日期"!="")

  • 湾该事件是否已发布到日历中 (列"在日历" ="")。
  • 将事件添加到日历后,我想添加"是"到电子表格中的一列(列"在日历中)。
  • 如果可能,根据特定列中的属性自动更改事件的颜色(即,如果列"状态" = NM,则事件的颜色为蓝色,如果"状态" = MT,然后事件的颜色是紫色等。)

我查看了整个网络上的各种帖子(主要是http://blog.ouseful.info/2010/03/07/maintaining-a-google-calendar-from-a-goole-spreadsheet-reprise/http://blog.ouseful.info/2010/03/04/maintaining-google-calendars-from-a-google-spreadsheet/),

我把以下脚本混为一谈:



var IN_CAL = "Yes";

function caltest() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var data = sheet.getDataRange().getValues();   // Process any rows with data
  var cal = CalendarApp.getCalendarsByName("Oil and Gas Test 3")[0];
  for (i in data) {
    var row = data[i];
    var state = row[2] // 3rd column, column with state
    var desc = row[5]; // 6th column, column with lease description
    var date = row[4]; // 5th column, column with date
    var title = state+": "+desc;
    var inCalendar = row[1]; // 2nd column, tells whether in calendar or not
    if ((inCalendar != IN_CAL)&&(date != " ")) { // Prevents adding duplicates to calendar  
      cal.createAllDayEvent(title, new Date(date))
      var v = parseInt(i)+1;
      sheet.getRange(v, 2, 1).setValue(IN_CAL);
      SpreadsheetApp.flush(); // Makes sure the cell is updated right away in case the script is interrupted
    }
    }
  }




如果有帮助,我的电子表格的列按以下顺序排列:

  

项目编号|在日历|国家|租赁日期|日期|描述

我参考" 在日历中"," "," 日期"和" 说明"

在我的剧本中。

似乎主要是因为它将事件添加到日历中,除了:

  1. 脚本正在添加"是"列中的所有单元格"在日历" 无论列中是否有日期" date&#34 ;; 和
  2. 我甚至没有尝试调整颜色。
  3. 有没有人知道如何让脚本同时阅读"在日历"和"日期"决定是否应创建事件时的列和" In Calendar"列应更新为"是"?我知道可能没有约会就创建了一个活动,但我不想要没有日期的行阅读"是"在"在日历"柱。我还希望脚本能够阅读整个" In Calendar"包含数据的列,而不是预定义的行数。

    此外,有关如何自动更改单个事件颜色的任何提示?

    如果您需要其他信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

通过单击行号为代码添加断点。你会得到一个红点。见第12行。

Break Point

然后点击错误图标。

Click Bug

您将看到所有变量值都显示在屏幕底部的窗口中。

Debug Break

点击“Step In”图标:

Step In

如果电子表格单元格中的日期格式化为日期,则日期值应如下所示:

  

2015年3月12日星期四19:01:08 GMT-0400(美国东部时间)

如果单元格格式化为字符串,则测试需要如下所示:

if (date != "") {

但是,无论如何,请逐步执行代码,并查看date变量的数据类型和值。 (和inCalendar变量)根据实际检索的值,将确定您需要对条件进行哪些检查。

我在猜测:

(date != " ")

始终评估为true