Errore durante la scrittura in un Foglio di Google
Exception: i parametri number non corrispondono alla firma del metodo per setValues
Utilizzando i metodi getRange e setValues di Google Apps Script durante la scrittura dati in un Foglio di Google, possono essere generati diversi errori sulla base di come il codice è stato definito.
Aggiungo un nuovo errore alla lista di quelli frequenti che ho raccolto al seguente indirizzo 'ERRORI FREQUENTI E SOLUZIONI' e che può essere restituito dall'interfaccia dell'edito di script al momento dell'esecuzione del codice, "Exception: i parametri (number[]) non corrispondono alla firma del metodo per SpreadsheetApp.Range.setValues", Fig. 1:
A seconda della lingua del browser può essere visualizzato: "Exception: The parameters (number[]) don't match the method signature for SpreadsheetApp.Range.setValues".
Il problema è praticamente quello che spesso genera questo tipo di eccezioni quando si tenta di scrivere su più righe o su più colonne.
Di seguito un esempio di codice che genera l'errore:
sheet.getRange(1, 1, 1, 2).setValues(['val1', 'val2']); // genera l'errore
Questo invece quello corretto:
sheet.getRange(1, 1, 1, 2).setValues([['val1', 'val2']]); // versione CORRETTA
Da notare che la differenza sta "solo" nelle parentesi quadre aggiuntive tra i valori da scrivere, in quanto setValues accetta in ingresso un array ed i valori stessi devono essere a sua volta contenuti in un secondo array.
Grazie, trovo piu' aiuto nei tuoi post che in tutto stackoverflow.
Complimenti Michele.
Grazie a te Marco per il feedback :)
Stackoverflow è una fonte inesauribile di informazione per uno sviluppatore :) nello specifico l'errore dell'articolo, in effetti, è abbastanza recente. Per dirla meglio, il messaggio restituito è nuovo rispetto a quelli che ho visto in questi anni e non è molto informativo a livello di risoluzione del problema. Facendo delle prove sono riuscito a capire a cosa viene associato. Mi fa piacere che ti sia stato di aiuto.
Grazie ancora e buon lavoro!
Il mio piccolo contributo. Se l'errore fosse generato da una linea di codice come la seguente:
var source = copySheet.getRange("a1").getDataRegion()
Quello che è da correggere è l'indirizzo della cella in maiuscolo.
var source = copySheet.getRange("A1").getDataRegion()
Decisamente un messaggio di errore poco informativo!
Grazie Roberto,
non sono riuscito a riprodurre l'eccezione tuttavia credo che la tua segnalazione possa essere utile dal momento che determinati errori occorrono in circostanze o configurazioni particolari. Pertanto quello da te suggerito può essere sicuramente un valido adeguamento da provare per risolvere in caso di messaggi di errore poco chiari e comunicativi :)
Sfrutto questo post vecchio di 3 anni ma con problema sempre attuale...
Ripropongo il tuo codice Michele , per chiederti come modificarlo per rendere settabile la cella:
-------------------------------
function doGet() {
return HtmlService.createHtmlOutputFromFile('index');
}
function trovaNumeroAbitanti(form){
var paese = form.paese;
var abitanti = 0;
var ss = SpreadsheetApp.openById("1sqDzpUmxOIZrtY42flklXs7Bk_D-RW28XAnlQAnTRow")
var sh = ss.getSheets[0];
var range = ss.getRange("A2:D17").getValues();
var range_len = range.length;
for (i=0; i<range_len; i++) {
//numero identifica la colonna in cui cercare partendo da zero
paese_curr = range[i][2];
if (paese_curr.toLowerCase() == paese.toLowerCase()) {
abitanti = range[i][3];
}
}
return abitanti;
}
---------------------
Come va scritto? perchè l'errore è sempre quello. Grazie a chi vorrà intervenire