2016-08-02 67 views
0

Ich arbeite derzeit an einem Skript, das ein Kalenderereignis aus einem Google-Tabellenzeileneintrag generiert. Mein Problem ist, dass ich dem Beschreibungsfeld in meinem Kalender keine Einträge aus mehr als einer Spalte hinzufügen kann. Der folgende Code geht davon aus, dass nur eine Spalte für die Eingabe eines Beschreibungsfelds verwendet werden soll. Wie ändere ich dies, damit ich die Daten einer anderen Spalte in das Beschreibungsfeld eines Google-Kalendereintrags aufnehmen kann?Wie synchronisiere ich Einträge aus mehreren Spalten in Google Tabellen mit dem Beschreibungsfeld im Google Kalender

//insert your google calendar ID 
var calendarId = "mygmailcalendar.com"; 

//index (starting from 1) of each column in the sheet 
var titleIndex = 2; 
var descriptionIndex = 3; 
var startDateIndex = 4; 
var endDateIndex = 5; 
var googleCalendarIndex = 6; 

/* 
find the row where the Google Calendar Event ID is blank or null 
The data of this row will be used to create a new calendar event 
*/ 
function findRow(sheet) { 
var sheet = SpreadsheetApp.getActiveSheet(); 
var dataRange = sheet.getDataRange(); 
var values = dataRange.getValues(); 

for (var i = 0; i < values.length; i++) { 
if(values[i][googleCalendarIndex-1]=="" || values[i][googleCalendarIndex-1]==null) 
newEvent(i+1); 
} 
}; 


/* 
get the data of the new row by calling getSheetData() and 
create a new Calendar event by calling submitToGoogleCalendar() 
*/ 

function newEvent(row){ 
var sheet = SpreadsheetApp.getActiveSheet(); 
var eventId = submitToGoogleCalendar(getSheetData(sheet,row),null) 
if(eventId!=null) 
sheet.getRange(row,googleCalendarIndex,1,1).setValue(eventId); 
}; 


/* 
Store the data of a row in an Array 
*/ 

function getSheetData(sheet,row) 
{ 
var data = new Array(); 

data.title=sheet.getRange(row,titleIndex,1,1).getValue(); 
data.description=sheet.getRange(row,descriptionIndex,1,1).getValue(); 

data.startDate = sheet.getRange(row,startDateIndex,1,1).getValue(); 
data.endDate = sheet.getRange(row,endDateIndex,1,1).getValue(); 

return data; 
}; 

/* 
if a cell is edited in the sheet, get all the data of the corresponding row and 
create a new calendar event (after deleting the old event) by calling submitToGoogleCalendar() 
*/ 

function dataChanged(event){ 

var sheet = SpreadsheetApp.getActiveSheet(); 
var row = event.range.getRow(); 

var eventId = sheet.getRange(row,googleCalendarIndex,1,1).getValue(); 

var eventId = submitToGoogleCalendar(getSheetData(sheet,row),eventId) 

if(eventId!=null) 
sheet.getRange(row,googleCalendarIndex,1,1).setValue(eventId); 

}; 


/* 
This function creates an event in the Google Calendar and returns the calendar event ID 
which is stored in the last column of the sheet 
*/ 
function submitToGoogleCalendar(sheetData,eventId) { 
// some simple validations ;-) 
if(sheetData.title == "" || sheetData.startDate == "" || sheetData.startDate == null) 
return null; 

var cal = CalendarApp.getCalendarById(calendarId); 
var start = new Date(sheetData.startDate); 
var end = new Date(sheetData.endDate); 
//end.setHours(23); 
//end.setMinutes(59); 
//end.setSeconds(59); 

// some simple date validations 
if(start > end) 
return null; 

var event = null; 

//if eventId is null (when called by newEvent()) create a new calendar event 
if(eventId==null) 
{ 
event = cal.createEvent(sheetData.title, start, end, { 
description : sheetData.description, 
}); 
return event.getId(); 
} 
/* 
else if the eventid is not null (when called by dataChanged()), delete the calendar event 
and create a new event with the modified data by calling this function again 
*/ 
else 
{ 
event = cal.getEventSeriesById(eventId); 
event.deleteEventSeries(); 
return submitToGoogleCalendar(sheetData,null); 
} 

return event.getId(); 

}; 

Antwort

0

Sie können die Ereignisbeschreibung aus zwei Spalten in einem Ereignisexportskript nicht füllen, soweit mir bekannt ist. Sie können jedoch mehrere Spalten in die Spalte, die Sie exportieren, als die Beschreibungsspalte ziemlich leicht einige Methoden einschließlich Formeln und Skripte verbinden. Zum Beispiel:

= ARRAYFORMULA (L7: L & "" & AL7: AL)