SKRIPT
Propojení osobního dotazníku s databází
Propojení osobního dotazníku s databází
function onOpen() {
var ui = SpreadsheetApp.getUi();
// Přidání vlastního menu s názvem "OVLÁDÁNÍ"
ui.createMenu('OVLÁDÁNÍ')
.addItem('Kopírovat data do DTB', 'main') // Přidání položky "Kopírovat data do DTB", která spustí funkci 'main'
.addItem('Odeslat oznámení o novém zaměstnanci', 'sendEmails1') // Přidání položky, která spustí funkci 'sendEmails1'
.addToUi();
}
function main() {
var ui = SpreadsheetApp.getUi();
// Zobrazení úvodního hlášení s instrukcemi
var response = ui.alert('UPOZORNĚNÍ',
`Pro kopírování dat do listu DTB postupujte následovně:
Přepněte se do listu, který je propojený s formulářem a označte řádek, který chcete přenést do listu DTB
(můžete buď označit celý řádek anebo jenom kliknout na některou buňku v daném řádku).
Jste přepnuti v tomto listu a označili jste správný řádek?`,
ui.ButtonSet.YES_NO);
// Kontrola odpovědi uživatele
if (response == ui.Button.NO) {
ui.alert('Upozornění', 'Nejprve označte správný řádek a spusťte skript znovu.', ui.ButtonSet.OK);
return;
}
var ss = SpreadsheetApp.getActiveSpreadsheet();
var parametrySheet = ss.getSheetByName('parametry');
// Načtení názvu listu z buňky B1 v listu 'parametry'
var targetSheetName = parametrySheet.getRange('B1').getValue();
var targetSheet = ss.getSheetByName(targetSheetName);
// Uložení aktivní buňky a listu
var originalSheet = ss.getActiveSheet();
var activeRange = originalSheet.getActiveRange();
var activeRow = activeRange.getRow();
var activeColumn = activeRange.getColumn();
// Přepnutí na cílový list a zobrazení listu uživateli
ss.setActiveSheet(targetSheet);
SpreadsheetApp.flush(); // Ujistí se, že změny se projeví uživateli
// Načtení hodnot z uloženého řádku v rozsahu sloupců C až AA
var values = targetSheet.getRange(activeRow, 3, 1, 27).getValues()[0];
// Přepnutí do listu 'DTB' a zobrazení listu uživateli
var dtbSheet = ss.getSheetByName('DTB');
ss.setActiveSheet(dtbSheet);
SpreadsheetApp.flush(); // Ujistí se, že změny se projeví uživateli
var lastRow = dtbSheet.getLastRow();
var freeRow = findFirstFreeRow(dtbSheet, 4, lastRow);
// Vložení zkopírovaných hodnot do prvního volného řádku počínaje sloupcem E
dtbSheet.getRange(freeRow, 5, 1, 27).setValues([values]);
// Vyhledání maximální hodnoty ve sloupci D a vytvoření nového ID
var maxD = findMaxInColumn(dtbSheet, 4); // Sloupec D
var newID;
if (maxD) {
newID = maxD + 1;
} else {
var year = new Date().getFullYear().toString().slice(-2);
newID = parseInt(year + '01');
}
dtbSheet.getRange(freeRow, 4).setValue(newID);
// Vložení nezaškrtnutého zaškrtávacího políčka do sloupce A
var checkBoxCell = dtbSheet.getRange(freeRow, 1);
checkBoxCell.insertCheckboxes();
// Vytvoření a vložení textového řetězce do sloupce AU
var textF = dtbSheet.getRange(freeRow, 6).getValue(); // Hodnota ze sloupce F
var textG = dtbSheet.getRange(freeRow, 7).getValue(); // Hodnota ze sloupce G
var textAU = removeDiacritics(textF.substring(0, 2)) + removeDiacritics(textG.charAt(0));
dtbSheet.getRange(freeRow, 47).setValue(textAU);
// Zobrazení závěrečného hlášení
ui.alert('Data byla vložena, doplňte další potřebné údaje k danému zaměstnanci.');
}
// Funkce pro vyhledání prvního volného řádku počínaje zadaným řádkem
function findFirstFreeRow(sheet, startRow, lastRow) {
for (var row = startRow; row <= lastRow; row++) {
var range = sheet.getRange(row, 5, 1, 6); // Sloupce E-K
var values = range.getValues()[0];
var isEmpty = values.every(function(value) {
return value === "";
});
if (isEmpty) {
return row;
}
}
return lastRow + 1; // Pokud nenašlo, vrátí další řádek
}
// Funkce pro vyhledání maximální hodnoty v daném sloupci
function findMaxInColumn(sheet, column) {
var data = sheet.getRange(4, column, sheet.getLastRow() - 3, 1).getValues();
var max = 0;
for (var i = 0; i < data.length; i++) {
if (data[i][0] > max) {
max = data[i][0];
}
}
return max;
}
// Funkce pro odstranění diakritiky z textu
function removeDiacritics(str) {
var diacriticsMap = {
'á': 'a', 'č': 'c', 'ď': 'd', 'é': 'e', 'ě': 'e', 'í': 'i', 'ň': 'n', 'ó': 'o', 'ř': 'r', 'š': 's', 'ť': 't', 'ú': 'u', 'ů': 'u', 'ý': 'y', 'ž': 'z',
'Á': 'A', 'Č': 'C', 'Ď': 'D', 'É': 'E', 'Ě': 'E', 'Í': 'I', 'Ň': 'N', 'Ó': 'O', 'Ř': 'R', 'Š': 'S', 'Ť': 'T', 'Ú': 'U', 'Ů': 'U', 'Ý': 'Y', 'Ž': 'Z'
};
return str.replace(/[^\u0000-\u007E]/g, function(a) {
return diacriticsMap[a] || a;
});
}