Návod Google Sheet

Návod: Import XLSX a Implementace App Scriptu

Partner Program Pro

Tento návod vás provede procesem importu tabulky a nastavením Google Apps Scriptu pro komunikaci s aplikací Partner Program Pro.

NÁSLEDUJÍCÍ KROKY MŮŽETE PROVÉST POUZE NA PC, Z MOBILU ANI TABLETU TUTO INSTALACI UDĚLAT BOHUŽEL NELZE

1. Import XLSX tabulky do Google Sheets

  1. Stáhněte tabulku Partner Program Pro.xlsx z https://deepsoft.cz/partner-program-pro/ .
  2. Otevřete svůj Google Drive.
  3. Klikněte na Nový -> Nahrát soubor a vyberte staženou Partner Program Pro.xlsx tabulku.
  4. Po nahrání na soubor klikněte pravým tlačítkem a zvolte Otevřít v aplikaci -> Tabulky Google.
  5. Důležité: Soubor se musí uložit jako formát Tabulek Google (Soubor -> Uložit jako Tabulky Google).
  6. a nebo
  7. Otevřete https://docs.google.com/spreadsheets/ a stisnete velké barevné + .
  8. Klikněte na Soubor -> Importovat -> Nahrát -> Procházet a vyberte staženou Partner Program Pro.xlsx tabulku.
  9. Importovat místo = nahradit tabulku ->Importovat data.
  10. Tabulku si můžete přejmenovat a soubor Partner Program Pro.xlsx z Google Sheets odstranit.

2. Příprava Google Apps Scriptu

V otevřené tabulce klikněte v horním menu na Rozšíření -> Apps Script. Smažte veškerý kód a vložte tento:

function doGet(e) {
  try {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var params = e.parameter;
    var action = params.action ? params.action.toString().trim() : "";
    var sheetName = params.subject ? params.subject.toString().trim() : "";

    // --- 1. VYTVORENÍ PROJEKTU ---
    if (action == "new_project") {
      var sheet = ss.getSheetByName(sheetName);
      if (!sheet) {
        var template = ss.getSheetByName("Default");
        sheet = template ? template.copyTo(ss).setName(sheetName) : ss.insertSheet(sheetName);
      }
      sheet.getRange("B1").setValue(sheetName);
      sheet.getRange("B2").setValue(params.note || "Nová zakázka");
      sheet.getRange("B3").setValue(params.term_start || "");
      sheet.getRange("B4").setValue(params.term_stop || "");
      sheet.getRange("B5").setValue(params.value || 0);
      sheet.getRange("D2").setValue(params.sender || "Admin");
      sheet.getRange("E2").setValue("proc");
      if (params.vcp1) sheet.getRange("B33").setValue(params.vcp1);
      if (params.vcp2) sheet.getRange("B34").setValue(params.vcp2);
      if (params.nkl1) sheet.getRange("L2").setValue(params.nkl1);
      if (params.nkl2) sheet.getRange("L3").setValue(params.nkl2);
      if (params.nkl3) sheet.getRange("L4").setValue(params.nkl3);
      SpreadsheetApp.flush();
      return ContentService.createTextOutput("Success: Vytvoreno").setMimeType(ContentService.MimeType.TEXT);
    }

    var sheet = ss.getSheetByName(sheetName);
    if (!sheet) return ContentService.createTextOutput("Error: List nenalezen").setMimeType(ContentService.MimeType.TEXT);

    // --- 2. PRIPOJENÍ K ZAKÁZCE (Join) ---
    if (action == "join_project") {
      var leadRows = [8, 14, 20, 26];
      for (var i = 0; i < leadRows.length; i++) {
        var row = leadRows[i];
        if (sheet.getRange("D" + row).getValue().toString().trim() === "") {
          var assignedId = "prac" + (20 + (i * 10));
          sheet.getRange("D" + row).setValue(params.sender || "Uživatel");
          SpreadsheetApp.flush();
          return ContentService.createTextOutput(assignedId).setMimeType(ContentService.MimeType.TEXT);
        }
      }
      return ContentService.createTextOutput("Error: Plno").setMimeType(ContentService.MimeType.TEXT);
    }

    // --- 3. NASTAVENÍ PRACOVNÍKA (update_worker) ---
    if (action == "update_worker") {
      var row = getRowFromId(params.id);
      var nameToSet = params.worker_name || params.note;
      if (nameToSet) sheet.getRange("D" + row).setValue(nameToSet);
      if (params.reward_type) sheet.getRange("E" + row).setValue(params.reward_type);
      if (params.rate) sheet.getRange("F" + row).setValue(params.rate);
      SpreadsheetApp.flush();
      return ContentService.createTextOutput("Success: Worker updated").setMimeType(ContentService.MimeType.TEXT);
    }

    // --- 4. ZÁPIS HODIN (update_hours) ---
    if (action == "update_hours") {
      var row = getRowFromId(params.id);
      sheet.getRange("G" + row).setValue(params.value);
      SpreadsheetApp.flush();
      return ContentService.createTextOutput("Success: Hours updated").setMimeType(ContentService.MimeType.TEXT);
    }

    // --- 5. CTENÍ NEBO ZÁPIS KONKRÉTNÍ BUNKY (update_cell) ---
    if (action == "update_cell") {
      var cellRef = params.note;
      if (params.id == "read") {
        var val = sheet.getRange(cellRef).getValue();
        return ContentService.createTextOutput(val.toString()).setMimeType(ContentService.MimeType.TEXT);
      } else {
        sheet.getRange(cellRef).setValue(params.value);
        SpreadsheetApp.flush();
        return ContentService.createTextOutput("Success: Cell updated").setMimeType(ContentService.MimeType.TEXT);
      }
    }

    // --- 6. SMAZÁNÍ PRACOVNÍKA (delete_worker) ---
    if (action == "delete_worker") {
      var idNum = parseInt(params.id);
      if (idNum == 20 || idNum == 30 || idNum == 40 || idNum == 50) {
        var offset = (idNum - 20) / 10;
        var dStart = 8 + (offset * 6);
        var dEnd = 13 + (offset * 6);
        var bStart1 = 8 + (offset * 2);
        var bStart2 = 19 + (offset * 3);
        var cRow = 8 + (offset * 6);

        sheet.getRange("D" + dStart + ":G" + dEnd).clearContent();
        sheet.getRange("B" + bStart1 + ":B" + (bStart1 + 1)).clearContent();
        sheet.getRange("B" + bStart2 + ":B" + (bStart2 + 2)).clearContent();
        sheet.getRange("C" + cRow).setValue("prac" + idNum);

        SpreadsheetApp.flush();
        return ContentService.createTextOutput("Success: Worker " + idNum + " deleted").setMimeType(ContentService.MimeType.TEXT);
      }
    }

    // --- 7. SMAZÁNÍ CELÉHO LISTU (delete_project) ---
    if (action == "delete_project") {
      var sheetToDelete = ss.getSheetByName(sheetName);
      if (sheetToDelete && sheetName !== "Default") {
        ss.deleteSheet(sheetToDelete);
        return ContentService.createTextOutput("Success: Project sheet deleted").setMimeType(ContentService.MimeType.TEXT);
      }
      return ContentService.createTextOutput("Error: Project sheet not found").setMimeType(ContentService.MimeType.TEXT);
    }

    // --- 8. SMAZÁNÍ PRACOVNÍKA TÝMU (D,E,F,G) ---
    if (action == "delete_team_worker") {
      var idNum = parseInt(params.id);
      var row = 0;
      var base = Math.floor(idNum / 10);
      var offset = idNum % 10;
      row = ((base - 1) * 6) + 2 + offset;

      if (row > 0) {
        sheet.getRange("D" + row + ":G" + row).clearContent();
        SpreadsheetApp.flush();
        return ContentService.createTextOutput("Success: Team worker " + idNum + " deleted").setMimeType(ContentService.MimeType.TEXT);
      }
    }

    return ContentService.createTextOutput("Error: Nezname action (" + action + ")").setMimeType(ContentService.MimeType.TEXT);

  } catch (err) {
    return ContentService.createTextOutput("Error Scriptu: " + err.message).setMimeType(ContentService.MimeType.TEXT);
  }
}

function getRowFromId(id) {
  var idNum = parseInt(id.replace("prac", ""));
  var base = Math.floor(idNum / 10);
  var offset = idNum % 10;
  return ((base - 1) * 6) + 2 + offset;
}

3. Nasazení (Deployment)

  1. Klikněte na modré tlačítko Nasadit (Implementovat) -> Nová implementace.
  2. Vyberte typ: Webová aplikace.
  3. Kdo má přístup: Kdokoliv (Anyone) - Nezbytné!
  4. Google vás upozorní na rizika....je vhodné vytvořit a používat jiný než osobní účet s fotkami
  5. Po nasazení zkopírujte URL, dlouhý text na konci výpisu končící ..../exec.

4. Nastavení v aplikaci

  1. Zkopírovanou URL vložte stisknutím "Paste" v aplikaci Partner Program Pro.
OD TÉTO CHVÍLE POUŽÍVÁTE VLASTNÍ TABULKU BEZ LIMITŮ.