JavaScript, HTML, CSS e... !
5 commenti

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:



Exception: i parametri (number[]) non corrispondono alla firma del metodo per SpreadsheetApp.Range.setValues

Fig. 1 - Exception: i parametri (number[]) non corrispondono alla firma del metodo per SpreadsheetApp.Range.setValues


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.

Tags

Michele Pisani

Michele Pisani

Sviluppatore Javascript ed esperto in Digital Analytics

L'esperienza nel settore Digital Analytics unita ad anni di sviluppo in Javascript ha trovato la massima espressione in Google Apps Script che mi ha permesso, con estrema facilità e poche righe di codice, di realizzare potenti applicazioni interattive e processi automatizzati integrati con i prodotti della G Suite.

Come contattarmi
scrivi un commento

5 Commenti

  1. Tuesday, June 2, 2020 alle ore 10:20 Marco

    Grazie, trovo piu' aiuto nei tuoi post che in tutto stackoverflow.
    Complimenti Michele.

    Rispondi a questo commento
    • Tuesday, June 2, 2020 alle ore 10:56 Michele PisaniAutore

      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!

      Rispondi a questo commento
  2. Sunday, January 24, 2021 alle ore 17:01 Roberto Quaglia

    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!

    Rispondi a questo commento
    • Sunday, January 24, 2021 alle ore 19:22 Michele PisaniAutore

      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 :)

      Rispondi a questo commento
  3. Tuesday, May 23, 2023 alle ore 14:33 Ivo Barini

    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

    Rispondi a questo commento

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato.I campi contrassegnati da un * sono obbligatori
Puoi utilizzare i seguenti tag nei commenti:
[bold]testo[/bold] se vuoi evidenziare un testo con il grassetto[code]function helloworld() { }[/code] se vuoi pubblicare una porzione di codice[url]https://www.appsscript.it[/url] se devi riferirti ad un indirizzo web