Nakonec jsem vytvořil docházkový systém pomocí tabulky v google docs. Ale bez otisků prstů.
Jedna tabulka je pro celý rok, každý řádek jeden den a vyplňují se hodiny od do, přestávka, dovolená a pod.
Jediné, co bylo trochu problém, je obarvit
celé řádky s víkendem nebo svátky, což nakonec vyřešil scirpt.
Skript obarvuje řádky na základě toho. Představují den roven "so" (sobota) nebo "ne" nebo je svátek.
Bohužel lepší řešení zatím google docs spreadcheet neumí. Bběžně umí obarvovat buňky jen na základě vlastní hodnoty, tedy nikoli celé řádky.
Kód: Vybrat vše
function colorAll() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 7;
var endRow = sheet.getLastRow();
for (var r = startRow; r <= endRow; r++) {
colorRow(r);
}
}
function colorRow(r){
var sheet = SpreadsheetApp.getActiveSheet();
var dataRange = sheet.getRange(r, 1, 1, 26);
var data = dataRange.getValues();
var row = data[0];
if (row[2] === "so" || row[2]=== "ne" || row[3]=== 1 /* svátek */ ) {
dataRange.setBackgroundRGB(255, 255, 153);
}else {
/* dataRange.setBackgroundRGB(255, 255, 255); */
}
if (row[0] !== "") { // je první den v měsíci - pak jej zvýrazni a odděl?
sheet.getRange(r, 1, 1, 3).setBackgroundRGB(153, 153, 255);
for (var i=1; i<29; i++) { sheet.getRange(r, i).setBorder(true,false,false,false,false,false); }
}
SpreadsheetApp.flush();
}
Skript v menu
tools vyberu položku
skript editor, tam tento skript vložím.
Příklad jiné hello world aplikace je zde
https://developers.google.com/apps-scri ... _functions
Pak už stačí jen spustit funkci colorALL ve stejném okně.
Abych docílil vypisování dnů v týdnu a měsíců v češtině, ve
File -> spredsheet settings, jsem nastavil Locale na Czech Republic. Den v týdnu vypíši pomocí funkce: =text(B10;"ddd") (datum je v B10), měsíc pomocí
=if(month(B8)<>month(B7);concat(concat(text(B8;"MMM");"-");text(B8;"MM"));""). (chci vypsat, jen když je nový měsíc)
Jelikož mám české locale, jednotlivé parametry funkcí se oddělují středníkem a ne čárkou, která znamená desetinnou čárku.
Sloupeček odpracovaných dní v měsíci obsahuje =if(month(B11)=month(B10);J10+VALUE(K11)*24;VALUE(K11)*24),
Objevil jsem totiž, že údaj čas převedu na počet hodin pomocí VALUE(cas)*24 . Dny se počítají na hodiny a minuty, ale v rámci dnů už jen hodiny s desetinným místem.
Sloupeček, co počítá počet pracovních dní v měsíci, vypadá takto. H9 je počet pracovních hodin daný den. (tedy nula o víkendu nebo svátku)
=if(month(B10)=month(B9);H9+I10;I10)
Aby se ukládalo datum poslední editace dne (řádku), přidám tento skript
Kód: Vybrat vše
/* http://webapps.stackexchange.com/questions/33372/how-can-i-automatically-set-last-updated-cell-in-row-google-docs-spreadsheets
*/
function onEdit(event)
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var actSht = event.source.getActiveSheet();
var actRng = event.source.getActiveRange();
var index = actRng.getRowIndex();
var dateCol = actSht.getLastColumn();
var lastCell = actSht.getRange(index,dateCol);
// var date = Utilities.formatDate(new Date(), "GMT+2", "dd/MM/yyyy HH:mm");
// Česká republika má udjně GMT+2
var date = new Date();
lastCell.setValue(date);
lastCell.setComment("Změněno: " + actRng.getA1Notation() +' uživatelem '+Session.getActiveUser());
ss.toast('Změněno = '+ actRng.getA1Notation()+' uživatelem '+Session.getActiveUser());
}
Jakoukoli tabulku, soubor nebo obrázek v google doc, je možné zveřejnit pomocí
Publich to the web. Více
http://www.bdnyc.org/2012/08/22/how-to- ... a-webpage/
Google docs umí vytvářet i jiné html na základě dat uložených v tabulkách, ale k tomu jsem zde využití zatím nenašel.
https://developers.google.com/apps-script/html_service