这篇主要介绍如何Google sheet里批量创建日历项目并同步到Google calendar的方法。

启发

在本科的时候我就研究了各种办法希望可以快速的创建各种日程,先后尝试过生成csv上传,使用Python API等等,但都比较麻烦。知道了Google sheet可以运行app script就一直想试试。在看了Google官方的博文后,决定实现一下,发现还是比较容易实现的,下面给大家介绍一下。

Step 1:新建脚本

初始表格如下:

第一步是从Google sheet 上新建与之配套的脚本,通过tools到script editor点击即可。

之后就可以看到如下的编辑页面。

Step 2:获得表格和日历id

第二步就是获取当前的表格和要添加的日历。将如下代码放到function里,之后点击运行,会出现提示给这个脚本授权。

var eventCal = CalendarApp.getCalendarById(xxxxxxx);
var spreadsheet = SpreadsheetApp.getActiveSheet();

日历id的获取方式如下

Step 3:获得表格内的信息

在获得表格之后,我们就可以通过以下的方法获得表格的数值。

spreadsheet.getRange("C4").getValue();

如果需要获得一块区域的数值可以使用如下的for loop。

var data = spreadsheet.getRange("A2:C4").getValues();
for (i = 0; i < data.length; i++) {
    var shift = data[i]
    var startTime = shift[0];
    var endTime = shift[1];
    var name = shift[2];
}

Step 4:创建日程

在获得数值后就可以使用api创建日历了。

eventCal.createEvent(name, startTime, endTime);

Step 5:加入UI

接下来如果需要更方便的启动脚本,可以将它加入ui之中。

在主function里加入如下的代码即可。这里的schedule就是实际同步日历的function。

var ui = SpreadsheetApp.getUi();
ui.createMenu("Sync to Calendar")
    .addItem("Schedule life", "schedule")
    .addToUi();

点击运行就可以看到如上的效果了。

但是如果退出再打开这个sheet,发现选项又消失了。这时我们需要新建一个trigger,保证这个脚本在每次这个Google sheet打开的时候都会运行。

trigger的在这里新建,或者点击app script里edit->current project’s triggers。

trigger内容如下:

踩坑

在调试时可以使用console.log(),之后在这里可以查看结果。

另一个坑就是app script的时区和Google sheet的时区需要保持一致。

Google sheet的时区设置:

app script的时区:

总结

这里附上完整可运行的代码:

https://gist.github.com/cczhong11/b7f59371d826742dffa034242722d8c2

小小的代码可以自动化很多操作,这也是我喜欢写代码的原因。希望可以帮到大家!

如果有不懂的地方欢迎问我。