0

Dies ist mein erster Versuch, Skripting in Google Tabellen zu verwenden. Ich versuche ein Skript zu erstellen, das Kalenderereignisse basierend auf meinen Daten in meiner Tabelle erstellt. Ich bin von einem hier abgebildeten Beispiel abgerückt.So speichern Sie Ereignis-ID aus Google Kalender in Google Tabellen ohne Überschreiben von Formeln

Dieser Code wird die Daten aus meinem Blatt ziehen, prüfen, ob das Ereignis existiert, wenn es nicht das Ereignis erstellen wird, wenn es dies tut, wird es das Ereignis löschen und ein neues erstellen (ich musste in der Lage sein Um die Zeiten eines Ereignisses zu bearbeiten, basiert dies alles auf der Ereignis-ID, die beim Erstellen des Ereignisses auf dem Blatt aufgezeichnet wird.

Das funktioniert gut, aber wenn es die Ereignis-ID aufzeichnet, zeichnet der Code alle Daten zurück in die Kalkulationstabelle, die dann Zellen mit Daten anstelle der Formeln, die ich verwende, überschreibt.

Wie kann ich diesen Code aktualisieren, damit er nur die eventID aktualisiert und nicht alles?

/** 
* Adds a custom menu to the active spreadsheet, containing a single menu item 
* for invoking the exportEvents() function. 
* The onOpen() function, when defined, is automatically invoked whenever the 
* spreadsheet is opened. 
* For more information on using the Spreadsheet API, see 
* https://developers.google.com/apps-script/service_spreadsheet 
*/ 
function onOpen() { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
    var entries = [{ 
    name : "Export Events", 
    functionName : "exportEvents" 
    }]; 
    sheet.addMenu("Calendar Actions", entries); 
}; 

/** 
* Export events from spreadsheet to calendar 
*/ 
function exportEvents() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var headerRows = 1; // Number of rows of header info (to skip) 
    var range = sheet.getDataRange(); 
    var lc = sheet.getLastColumn() 
    var data = range.getValues(); 
    var calId = "[email protected]"; 
    var cal = CalendarApp.getCalendarById(calId); 
    for (i=0; i<data.length; i++) { 
    if (i < headerRows) continue; // Skip header row(s) 
    var row = data[i]; 
    var date = new Date(row[0]); // First column 
    var title = row[13];   // Fourteenth column 
    var tstart = new Date(row[2]); 
    tstart.setDate(date.getDate()); 
    tstart.setMonth(date.getMonth()); 
    tstart.setYear(date.getYear()); 
    var tstop = new Date(row[3]); 
    tstop.setDate(date.getDate()); 
    tstop.setMonth(date.getMonth()); 
    tstop.setYear(date.getYear()); 
    var loc = "1117 w 24th Street, Los Angeles, CA 90007"; 
    var desc = row[14]; 
    var id = row[15];    // Sisteenth column == eventId 
    // Check if event already exists, delete it if it does 
    try { 
     var event = cal.getEventById(id) 
     event.deleteEvent(); 
     row[15] = ''; // Remove event ID  
     } 
    catch (e) { 
     // do nothing - we just want to avoid the exception when event doesn't exist 
     } 
     //cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00"), {description:desc,location:loc}); 
    var newEvent = cal.createEvent(title, tstart, tstop, {description:desc,location:loc}).getId(); 
    row[15] = newEvent; // Update the data array with event ID 
    debugger; 

// Record all event IDs to spreadsheet 
    idrange.setValues(data); 
    } 

} 


function testRange() { 

var sheet = SpreadsheetApp.getActiveSheet(); 
var range = sheet.getDataRange(); 
logger.log(data); 

} 

Antwort

0

Seit range ist range = sheet.getDataRange() Sie halten zu lesen und auf dem Blatt alles zu überschreiben. Lass uns nur die IDs schreiben. Erstellen Sie zuerst ein kleineres Datenfeld, das nur die Id-Spalte enthält. Dann legen Sie es in die Tabelle, wo es hingehört: in der 16. Spalte (war 15 in 0-basierten Index, aber 16 in 1-basierten Index).

Folgendes sollte nach die for-Schleife platziert werden, nicht innerhalb davon.

// Record all event IDs to spreadsheet 
var id_data = data.map(function (row) { 
    return [row[15]];  // keep only that column 
}); 
sheet.getRange(1, 16, id_data.length, 1).setValues(id_data); // write it in the sheet 
+0

Das hat perfekt funktioniert! Ich danke dir sehr! Ich hatte Stunden damit verbracht, nach der Lösung zu suchen, aber da mir immer noch nicht klar ist, wie alles funktioniert, wusste ich nicht, wonach ich suchen sollte. Vielen Dank! –

Verwandte Themen