簡體   English   中英

谷歌表自動填充谷歌日歷

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM