Zurück zur Projekt-Übersicht

Google Drive Schnittstelle einrichten

Verbinden Sie Ihre App mit Google Drive, um Projekt- & Anwesenheitslisten per Klick automatisch in eine Google Tabelle zu speichern.

1 Neue Google Tabelle anlegen

Öffnen Sie Ihr Google Drive und erstellen Sie eine neue Google Tabelle (z. B. mit dem Namen "Handwerker Zeit Exporte").

2 Script einfügen

Klicken Sie in Ihrer Google Tabelle in der Menüleiste oben auf Erweiterungen $\rightarrow$ Apps Script. Löschen Sie dort den alten Code und fügen Sie folgenden Code ein:

function doPost(e) {
  try {
    var data = JSON.parse(e.postData.contents);
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    
    var sheetName = "Export " + (data.monat || "Projektübersicht");
    var sheet = ss.getSheetByName(sheetName);
    if (!sheet) {
      sheet = ss.insertSheet(sheetName);
    }
    
    sheet.clear();

    var headers = ["Tag", "Datum"].concat(data.mitarbeiterNamen);
    sheet.appendRow(headers);

    var headerRange = sheet.getRange(1, 1, 1, headers.length);
    headerRange.setBackground("#394F63");
    headerRange.setFontColor("#FFFFFF");
    headerRange.setFontWeight("bold");
    headerRange.setHorizontalAlignment("center");

    var tageKurz = ["So.", "Mo.", "Di.", "Mi.", "Do.", "Fr.", "Sa."];

    var dayColors = {
      "Mo.": ["#f0fdf4", "#dcfce7"],
      "Di.": ["#fef2f2", "#fee2e2"],
      "Mi.": ["#fefce8", "#fef9c3"],
      "Do.": ["#f0f9ff", "#e0f2fe"],
      "Fr.": ["#fff7ed", "#ffedd5"],
      "Sa.": ["#faf5ff", "#f3e8ff"],
      "So.": ["#f8fafc", "#e2e8f0"]
    };
    var defaultColors = ["#ffffff", "#f1f5f9"];

    var backgrounds = [];

    data.zeilen.forEach(function(zeile) {
      var wochentag = "";
      
      if (zeile.datum && zeile.datum.indexOf(" - ") === -1) {
        var parts = zeile.datum.split(".");
        if (parts.length === 3) {
          var d = new Date(parseInt(parts[2]), parseInt(parts[1]) - 1, parseInt(parts[0]));
          wochentag = tageKurz[d.getDay()];
        }
      }

      var rowArray = [wochentag, zeile.datum];

      data.mitarbeiterUids.forEach(function(uid) {
        var orte = zeile.einsatzorte[uid];
        if (orte && orte.length > 0) {
          rowArray.push(orte.join(", "));
        } else {
          rowArray.push("-");
        }
      });
      sheet.appendRow(rowArray);

      var colors = dayColors[wochentag] || defaultColors;
      var rowBackgrounds = [];
      for (var colIdx = 0; colIdx < headers.length; colIdx++) {
        rowBackgrounds.push(colIdx % 2 === 0 ? colors[0] : colors[1]);
      }
      backgrounds.push(rowBackgrounds);
    });

    var totalCols = headers.length;
    var totalRows = data.zeilen.length + 1;
    var fullRange = sheet.getRange(1, 1, totalRows, totalCols);
    
    if (backgrounds.length > 0) {
      sheet.getRange(2, 1, backgrounds.length, totalCols).setBackgrounds(backgrounds);
    }

    fullRange.setBorder(true, true, true, true, true, true, "#cbd5e1", SpreadsheetApp.BorderStyle.SOLID);
    fullRange.setWrap(true);
    fullRange.setVerticalAlignment("middle");

    sheet.setColumnWidth(1, 55);
    sheet.setColumnWidth(2, 110);

    for (var col = 3; col <= totalCols; col++) {
      sheet.setColumnWidth(col, 170);
    }

    sheet.getRange(2, 1, totalRows - 1, 2).setHorizontalAlignment("center");

    sortExportSheetsDescending(ss);

    sheet.activate();

    return ContentService.createTextOutput(JSON.stringify({ status: "success" }))
      .setMimeType(ContentService.MimeType.JSON);

  } catch (error) {
    return ContentService.createTextOutput(JSON.stringify({ status: "error", message: error.toString() }))
      .setMimeType(ContentService.MimeType.JSON);
  }
}

function sortExportSheetsDescending(ss) {
  var sheets = ss.getSheets();
  var exportSheets = [];

  sheets.forEach(function(s) {
    if (s.getName().indexOf("Export ") === 0) {
      exportSheets.push(s);
    }
  });

  exportSheets.sort(function(a, b) {
    return b.getName().localeCompare(a.getName());
  });

  exportSheets.forEach(function(s, index) {
    ss.setActiveSheet(s);
    ss.moveActiveItem(index + 1);
  });
}

3 Als Web-App bereitstellen

1. Klicken Sie oben rechts auf den blauen Button Bereitstellen $\rightarrow$ Neue Bereitstellung.
2. Wählen Sie das Zahnrad-Symbol $\rightarrow$ Web-App.
3. Stellen Sie "Wer hat Zugriff" zwingend auf Jeder.
4. Klicken Sie auf Bereitstellen, gewähren Sie die Rechte und kopieren Sie die erzeugte Web-App-URL.

4 Web-App URL hier speichern