簡體   English   中英

Google Apps腳本-createEvent函數未創建日歷事件

[英]Google Apps Script - createEvent function not creating calendar event

我們正在嘗試使用Google表單創建一個在線表單來接受約會請求。 該過程應如下所示:

  1. 用戶填寫表格並提交其信息(此方法有效)
  2. 電子郵件已發送到我們的Gmail,以通知我們有新的傳入請求(此方法有效)
  3. 我們進入Google電子表格。 一共三張 一張叫Requests的表。 另一個稱為已接受 另一個叫做“ 拒絕” (已創建)
  4. “請求”表的最后一列具有一個下拉菜單,其中包含“已接受”或“已拒絕”值。 根據我們選擇的內容,它將把整行移動到適當的工作表中-接受或拒絕。 (直到下面的第5步為止)
  5. 如果該行移至“已接受”,則應創建一個新的日歷事件。 這是無效的部分。 該行已正確移動到“接受”表中,但未創建新的Google日歷事件。

奇怪的是,如果我們手動運行該函數,它將起作用。 它接受最后一行並創建一個事件。 如果我們嘗試通過直接調用函數直接通過代碼運行函數,則該函數不會創建事件。 這是我們的moverow.gs代碼

(請注意,所有機密的識別信息已被刪除,例如日歷ID):

function onEdit(e) {
  try { moveRow(e) } catch (error) { Browser.msgBox(error) }
}

function moveRow(e) {

  var rowStart = e.range.rowStart;
  var colStart = e.range.columnStart;

  var calendarStaff1Id = "<link to calendar>";
  var calendarStaff2Id = "<link to calendar>"
  var calendarStaff3Id = "<link to calendar>"
  var calendarStaff4Id = "<link to calendar>"

  if ( rowStart == e.range.rowEnd && colStart == e.range.columnEnd ) {
    var active = e.source.getActiveSheet();
    var name = active.getName();

    if ( name == "Requests" && colStart == 10 ) { 
  var value = e.value;

  if ( value == "ACCEPTED (S1)" ) {
    var rowValues = active.getRange( rowStart + ':' + rowStart ).getValues();
    e.source.getSheetByName("Accepted").appendRow(rowValues[0])
    active.deleteRow(rowStart);
    var calendarId = calendarStaff1Id;
    addEvent();

  }

  if ( value == "ACCEPTED (S2)" ) {
    var rowValues = active.getRange( rowStart + ':' + rowStart ).getValues();
    e.source.getSheetByName("Accepted").appendRow(rowValues[0])
    active.deleteRow(rowStart);
    var id = calendarStaff2Id;
    addEvent();

  }

  if ( value == "ACCEPTED (S3)" ) {
    var rowValues = active.getRange( rowStart + ':' + rowStart ).getValues();
    e.source.getSheetByName("Accepted").appendRow(rowValues[0])
    active.deleteRow(rowStart);
    var calendarId = calendarStaff3Id;
    addEvent();

  }

  if ( value == "ACCEPTED (S4)" ) {
    var rowValues = active.getRange( rowStart + ':' + rowStart ).getValues();
    e.source.getSheetByName("Accepted").appendRow(rowValues[0])
    active.deleteRow(rowStart);
    var calendarId = calendarStaff4Id;
    addEvent(calendarId);

  }

  if ( value == "REJECTED" ) {  // Change to the value that will trigger the move
    var rowValues = active.getRange( rowStart + ':' + rowStart ).getValues();  // Entire row
    e.source.getSheetByName("Rejected").appendRow(rowValues[0])  // Change to your "move to" sheet name
    active.deleteRow(rowStart);
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Rejected").activate();

    Browser.msgBox("Please contact client to let them know that their request cannot be fulfilled");

      }
    }
  }
}

function addEvent(calendarId) {

    var startDtId = 7;
    var titleId = 2;
    var titleId2 = 6;
    var descId = 8;
    var formTimeStampId = 1;

    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Accepted").activate();

    // Switch to sheet Accepted and start the calendar event creation
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Accepted");
    var rows = sheet.getDataRange();
    var numRows = rows.getNumRows();
    var values = rows.getValues();
    var lr = rows.getLastRow();
    var startDt = sheet.getRange(lr,startDtId,1,1).getValue();
    var subOn = "Added :"+sheet.getRange(lr,formTimeStampId,1,1).getValue()+" by: "+sheet.getRange(lr,titleId,1,1).getValue();
    var desc = "Comments :"+sheet.getRange(lr,8,1,1);
    var title = sheet.getRange(lr,titleId,1,1).getValue()+" - "+sheet.getRange(lr,titleId2,1,1).getValue();
    var start = new Date(startDt);
    var end = new Date(startDt.valueOf()+60*60*1000);
    var loc = 'Central Library';

    var cal = CalendarApp.getCalendarById(calendarId);

    //Browser.msgBox("Please add the following event into your calendar: " + title + " Start Time: " + start + " End Time: " + end);

    var event = cal.createEvent(title, start, end);

};

請幫忙!! 我們處於機智。 提前致謝。

簡單的onEdit()觸發器無法執行任何需要授權的操作。 誰擁有腳本所在的文檔無關緊要; 如果是簡單的觸發器,則為匿名。

而是使用可安裝的觸發器 (您可以簡單地重命名功能,然后按照手動管理觸發器中的說明進行設置。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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