从GoogleSheet同步到GoogleCal
这篇主要介绍如何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
小小的代码可以自动化很多操作,这也是我喜欢写代码的原因。希望可以帮到大家!
如果有不懂的地方欢迎问我。