[英]Google sheet to auto- populate google calendar
我正在嘗試從特定的 google 表格中獲取數據以在 google 日歷中創建事件。 請參閱電子表格。
https://docs.google.com/spreadsheets/d/1eBEStiTKXI0YPXfQBYzqXjwwv4kZ21033TdtysxdhHI/edit?usp=sharing
基本上,當有人勾選方框時,它會在日期 (Col B) 的澳大利亞東部標准時間 10:00:00 為該人(第 2 行)創建一個事件。 因此,例如,當某些人勾選單元格 P14 中的框時,它會創建一個事件:
姓名 - Lily Ahadi - PC 活動日期 - 2020 年 3 月 16 日活動時間:10:00:00
這是我部分工作的代碼,然后讓其他人幫忙,我們都沒有得到任何幫助。 我即將放棄,但我想我會與堆棧流專家進行最后一次嘗試。 該代碼在工作表的腳本編輯器中可用。
function onEdit(e) {
try {
var range = e.range;
Browser.msgBox(range);
var nameSheet = e.source.getSheetName();
var rowID = range.rowStart;
var colID = range.columnStart;
var res = e;
var oldValue = res.oldValue;
var newValue = res.value;
var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(nameSheet);
if (oldValue == "FALSE" && newValue == "TRUE" && nameSheet == "Master Client List"){
var category = data.getRange(3, colID).getValue();
var date = data.getRange(rowID, 2).getValue();
date = getYesterdaysDate(date)
var timeDiff = 60;
var startTime = "10:00:00";
if (category == "PC"){
var name = data.getRange(2, colID - 1).getValue();
Browser.msgBox(name+'-'+category + date);
}else{
var name = data.getRange(2, colID - 2).getValue();
}
// var startDateTime = date+' '+startTime+':00';
var startDateTime = testMoment1(date, startTime);
var endDateTime = addMins(startDateTime, timeDiff);
var event = CalendarApp.getDefaultCalendar().createEvent(name+'-'+category,
new Date(startDateTime),
new Date(endDateTime),
{description: ''});
Logger.log('Event ID: ' + event.getId());
}
}
catch(err) {
SpreadsheetApp.getUi().alert(err);
}
}
function testMoment(date, time) {
eval(UrlFetchApp.fetch('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js').getContentText());
var date = moment(date).format('YYYY/MM/DD');
// var time = time;
// Logger.log(moment(date).format('MM/DD/YYYY'));
// tell moment how to parse the input string
var momentObj = moment(date + time, 'YYYY-MM-DDLT');
// conversion
var dateTime = momentObj.format('YYYY-MM-DDTHH:mm:ss');
return dateTime;
}
function testMoment1(date, time) {
eval(UrlFetchApp.fetch('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js').getContentText());
// var date = moment(date).format('YYYY/MM/DD');
// var time = time;
// Logger.log(moment(date).format('MM/DD/YYYY'));
var c = new Date();
var n = c.getFullYear();
// tell moment how to parse the input string
var momentObj = moment(date + time, 'YYYY-MM-DDLT').set('year', n).add(0, 'days');
// conversion
var dateTime = momentObj.format('YYYY-MM-DDTHH:mm:ss');
// dateTime = moment(dateTime, "YYYY-MM-DDTHH:mm:ss");
return dateTime;
}
function addMins(dateTime, durationInMinutes){
eval(UrlFetchApp.fetch('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js').getContentText());
var startTime = dateTime;
// var durationInMinutes = '120';
var endTime = moment(startTime, 'YYYY-MM-DDTHH:mm:ss').add(durationInMinutes, 'minutes').format('YYYY-MM-DDTHH:mm:ss');
return endTime;
}
function getYesterdaysDate(date1) {
var date = new Date(date1);
date.setDate(date.getDate());
var day = date.getDate();
var month = (date.getMonth()+1);
var year = date.getFullYear();
month = month < 10 ? '0'+month : month;
day = day < 10 ? '0'+day : day;
// Logger.log(date.getFullYear() + '-' + (date.getMonth()+1) + '-' + date.getDate());
return year + '/' + month + '/' + day;
}
function myFunction() {
var data=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Master Client List');
// var s=ss.getActiveSheet();
var c=data.getLastColumn();
for (var i = 3; i <= c; i++) {
if (i%3 === 0){
var name = data.getRange(2, i).getValue();
var dob = data.getRange(1, i).getValue();
var timeDiff = 60;
var startTime = "10:00:00";
Logger.log(name);
Logger.log(name);
Logger.log(startTime);
//birthdayevent(name, dob, startTime, timeDiff)
Logger.log(name);
// break;
}
}
}
您的代碼有兩個主要問題:
1. 您正在查詢if (oldValue == "FALSE")
如果你在你的代碼中實現了Logger.log(oldValue);
您會意識到空復選框將返回值"false"
而不是"FALSE"
。 您需要相應地修改if
條件。
2. 您正在嘗試在簡單的onEdit
觸發器上使用UrlFetchApp
根據簡單觸發器的限制規定:
他們無法訪問需要授權的服務。
通過將觸發器轉換為可安裝的觸發器,可以輕松解決此問題。 為了這:
onEdit()
重命名為不同的名稱onEdit
一個可安裝的onEdit
觸發器,如here所述實現這兩個修改后,當您選中復選框時,您的代碼將運行並創建一個事件。
現在,我還不夠熟悉,無法判斷事件參數(數據、事件標題)是否按您的意願檢索。 對於故障排除,我建議您記錄所有變量 - 這將幫助您快速發現任何錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.