javascript - 对使用 Google 电子表格维护/更新 Google 日历(包括自动更改颜色)的脚本进行故障排除

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

我正在尝试编写一个 Google 应用脚本来完成以下任务:

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

  • a。事件是否指定了日期(列“date”!=“”)

  • b.该事件是否已发布到日历中 (“在日历中”列=“”)。
  • 将事件添加到日历后,我想在电子表格的某一列(“在日历中”列)中添加"is"。
  • 如果可能,根据特定列中的属性自动更改事件的颜色(即,如果列“State”= NM,则事件的颜色为蓝色,如果“State”= 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
    }
    }
  }

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

Project Number | In Calendar | State | Lease Date | Date | Description.

我引用了“日历”、“状态”、“日期”和“说明

在我的脚本中。

它的主要作用似乎是将事件添加到日历中,除了:

  1. 脚本正在向“日历中”列中的所有单元格添加"is" 无论“日期”栏中是否有日期; 和
  2. 我什至没有尝试过调整颜色。

在决定是否应创建事件并将“日历中”列更新为"is"时,是否有人对如何让脚本读取“日历中”和“日期”列有任何提示?我知道没有日期可能不会创建事件,但我不希望没有日期的行在“日历中”列中显示为"is"。我还希望脚本读取包含数据的整个“日历”列,而不是预定义的行数。

另外,关于如何自动更改单个事件的颜色有什么提示吗?

如果您需要更多信息,请告诉我。

最佳答案

通过单击行号向代码添加断点。你会得到一个红点。请参阅第 12 行。

Break Point

然后单击错误图标。

Click Bug

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

Debug Break

点击“步入”图标:

Step In

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

Thu Mar 12 2015 19:01:08 GMT-0400 (EDT)

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

if (date != "") {

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

我猜:

(date != " ")

始终评估为true

关于javascript - 对使用 Google 电子表格维护/更新 Google 日历(包括自动更改颜色)的脚本进行故障排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29110929/

相关文章:

javascript - 重写视差脚本,使其读取多个类而不是一个 ID

google-apps-script - 使用 Selection 的 RangeElements 获取 Google Doc 中的所有嵌套文本元素

javascript - Google Apps 脚本文本区域

google-apps-script - 自动排序范围,但仅当有筛选 View 处于事件状态时

Javascript,为什么 "this"在绑定(bind) Node 回调中未定义?

javascript - Webpack 不创建输出文件(不使用 webpack-dev-server)

javascript - 使用数据表打开模式

google-apps-script - 谷歌表格 : getting a sheet by its index

google-sheets - Google 表格中的 ArrayFormula 和 "AND"公式

google-apps-script - 如何触发引用单元格的onEdit事件?