Collega un Google Apps Script per leggere e scrivere le distanze in tempo reale. Tutti gli utenti vedono le correzioni immediatamente.
Come configurare (5 minuti)
- Crea un Google Sheet con colonne: Comune e KM
- Dal foglio: Estensioni → Apps Script
- Incolla il codice dello script (vedi sotto)
- Clicca Distribuisci → Nuova distribuzione → App web
- Esegui come: Me · Accesso: Chiunque
- Clicca Distribuisci · copia l'URL e incollalo qui
function doGet(e){
var ss=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var props=PropertiesService.getScriptProperties();
// PREZZI: leggi
if(e.parameter.action==='getprezzi'){
var d=parseFloat(props.getProperty('diesel'))||0;
var b=parseFloat(props.getProperty('benzina'))||0;
var up=props.getProperty('prezziUp')||'';
return resp({ok:true,diesel:d,benzina:b,updated:up});
}
// PREZZI: aggiorna manuale
if(e.parameter.action==='setprezzi'){
props.setProperty('diesel',e.parameter.diesel);
props.setProperty('benzina',e.parameter.benzina);
props.setProperty('prezziUp',Utilities.formatDate(new Date(),'Europe/Rome','dd/MM/yyyy'));
return resp({ok:true});
}
// DISTANZE: scrivi
if(e.parameter.action==='set'){
var comune=e.parameter.comune,km=parseInt(e.parameter.km);
if(!comune||!km)return resp({ok:false});
var rows=ss.getDataRange().getValues();
for(var i=1;i<rows.length;i++){
if(rows[i][0].toString().toLowerCase().trim()===comune.toLowerCase()){
ss.getRange(i+1,2).setValue(km);return resp({ok:true,action:'updated'});
}
}
ss.appendRow([comune,km]);return resp({ok:true,action:'added'});
}
// DISTANZE: leggi tutte
var rows=ss.getDataRange().getValues(),out={};
for(var i=1;i<rows.length;i++){
if(rows[i][0]&&rows[i][1])out[rows[i][0].toString().toLowerCase().trim()]=parseInt(rows[i][1]);
}
return resp(out);
}
}
if(diesel>0&&benzina>0){
var up=Utilities.formatDate(new Date(),'Europe/Rome','dd/MM/yyyy');
props.setProperty('diesel',diesel.toString());
props.setProperty('benzina',benzina.toString());
props.setProperty('prezziUp',up);
return {ok:true,diesel:diesel,benzina:benzina,updated:up};
}
return {ok:false,debug:'prezzi non trovati nel CSV',lines:lines.length};
}catch(err){return {ok:false,error:err.message};}
}
function resp(obj){
return ContentService.createTextOutput(JSON.stringify(obj)).setMimeType(ContentService.MimeType.JSON);
}