Con il metodo setFormula() della Classe Range
Utilizzare le funzioni native di Google Sheets da Apps Script
Personalmente preferisco gestire le operazioni effettuate sulle celle di un Foglio di Google utilizzando gli strumenti messi a disposizione dal Javascript, considerando che la logica e la sintassi dei Google Script si basa appunto su questo linguaggio. È tuttavia fattibile poter inserire all'interno di una cella le formule native dello Spreadsheet.
Ciò non significa che possono essere utilizzate all'interno degli script per effettuare calcoli ed operazioni ma dallo script è possibile assegnarle direttamente ad una cella o più celle.
Nonostante possano esserci alcune controindicazioni nell'adottare questa pratica, come ad esempio la leggibilità del codice oppure la generazione di tempi di ritardo di elaborazioni non gestite direttamente dallo script così come il fatto che la formula rimarrà assegnata alla cella anche ad un'apertura successiva del Foglio di Google, può capitare di dover gestire una situazione dove ne è previsto l'uso.
Per poter inserire una formula nativa da Apps Script in una cella di un Foglio di Google possiamo fare uso del metodo setFormula(formula) della Classe Range (del Servizio Spreadsheet).
Il codice seguente, similmente presente anche nella documentazione ufficiale, mostra la sintassi da adottare per inserire la formula nativa della somma (SUM) all'interno della cella B6 basata sui valori delle celle da B1 a B5:
function setNativeFormula() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var cell = sheet.getRange("B6");
cell.setFormula("=SUM(B1:B5)"); // <-- assegnazione della formula nativa alla cella indicata
cell.setBackground('yellow');
}
L'immagine seguente ne evidenzia il risultato:
Posizionando il focus sulla cella in questione, alla quale ho modificato il colore di sfondo per renderla più evidente, e guardando all'interno della barra delle funzioni (fx) è possibile vedere che l'assegnazione della formula nativa è andata a buon fine (come appunto conferma il valore all'interno della cella).
Buongiorno Michele,
eseguo una macro che compila ed invia il corpo della mail prendendo i valori da varie celle.
questo è lo script che richiamo con un tasto, invia la mail e aggiunge una nuova riga:
Vorrei poter automatizzare la macro quando determinate celle vengono compilate da un modulo esterno..
Grazie
Ciao Roberto,
quale inconveniente incontri durante lo sviluppo del tuo codice?
Potrebbe esserti utile, nel caso tu non lo avessi letto, l'articolo "Gestire l'evento onEdit(e) per l'invio automatico delle Email con Google Apps Script" https://www.appsscript.it/articoli/gestire-l-evento-onedit-negli-spreadsheet-per-l-invio-automatico-delle-email-con-google-apps-script/, in quanto in questo caso avrai bisogno dell'uso di un trigger installabile.
Ottima Guida
Grazie per il feedback Paolo!
Ciao, ho un problema con il codice qui in questione:
in particolare il set.formula(..) inserisce la formula nella cella corretta ma poi nel foglio di lavoro mi compare l'errore "se. Funzione non riconosciuta".
Ciao Dario,
dal messaggio di errore che indichi mi viene in mente che lo Spreadsheet possa aspettarsi la formula in lingua inglese, ovvero IF anziché SE. Di conseguenza anche le altre funzioni della formula dovrebbero essere convertite.
Buongiorno Michele, cortesemente potresti spiegarmi la differenza tra .setValue e .setFormula per inserire una funzione nativa in una cella ?
Ho provato a utilizzare entrambi i metodi inserendo la funzione =SUM(D1:D2) ed entrambi sembrano fare la stessa cosa e funzionare allo stesso modo. Grazie.
function inserimento_formula_nativa_con_setFormula_e_SetValue() {
//DEFINISCO APPLICAZIONE E FILE
const ss = SpreadsheetApp.getActiveSpreadsheet();
//DEFINISCO FOGLIO
const sh = ss.getSheetByName('Base Dati');
//SCRIVO NELLA CELLA D2
sh.getRange("D2").setValue(10);
//SCRIVO NELLA CELLA D3
sh.getRange("D3").setValue(20);
//SCRIVO FORMULA NATIVA =SUM(D2:D3) NELLA CELLA D4 CON .setFormula
sh.getRange("D4").setFormula("=SUM(D2:D3)");
//SCRIVO FORMULA NATIVA =SUM(D2:D3) NELLA CELLA D5 CON .setValue
sh.getRange("D5").setValue("=SUM(D2:D3)");
}
Buongiorno Michele, cortesemente potresti spiegarmi la differenza tra .setValue e .setFormula per inserire una funzione nativa in una cella ?
Ho provato a utilizzare entrambi i metodi inserendo la funzione =SUM(D1:D2) ed entrambi sembrano fare la stessa cosa e funzionare allo stesso modo. Grazie.
function inserimento_formula_nativa_con_setFormula_e_SetValue() {
//DEFINISCO APPLICAZIONE E FILE
const ss = SpreadsheetApp.getActiveSpreadsheet();
//DEFINISCO FOGLIO
const sh = ss.getSheetByName('Base Dati');
//SCRIVO NELLA CELLA D2
sh.getRange("D2").setValue(10);
//SCRIVO NELLA CELLA D3
sh.getRange("D3").setValue(20);
//SCRIVO FORMULA NATIVA =SUM(D2:D3) NELLA CELLA D4 CON .setFormula
sh.getRange("D4").setFormula("=SUM(D2:D3)");
//SCRIVO FORMULA NATIVA =SUM(D2:D3) NELLA CELLA D5 CON .setValue
sh.getRange("D5").setValue("=SUM(D2:D3)");
}