Javascript, HTML, CSS e... !
0 commenti

Altezza di intervallo non valida, era di X ma dovrebbe essere di Y

Incorrect range height, was X but should be Y in Google Apps Script

Uno degli errori più frequenti che vengono restituiti dall'editor di script di Apps Script quando si tenta di manipolare un Foglio di Google è 'Altezza di intervallo non valida, era di 1 ma dovrebbe essere di 16', Fig, 1:



Incorrect range height, was 1 but should be 16 in apps script

Fig. 1 - Altezza di intervallo non valida, era di 1 ma dovrebbe essere di 16


I valori 1 e 16 sono indicativi e possono variare in base al range di celle delo Spreadsheet con cui stiamo lavorando.
Allo stesso modo l'errore analogo è 'Larghezza di intervallo non valida, era di 1 ma dovrebbe essere di 16' (per chi ha impostato Google in lingua originale: Incorrect range width, was 1 but should be 16).

Questo tipo di errore si presenta quando definiamo un range di celle con il metodo getRange di Apps Script ma proviamo a scriverci un array di valori che ha dimensioni diverse.

Ad esempio, poniamo che io voglia inserire una lista di 16 valori nella prima colonna di uno Sheet, se io avessi un array di questo tipo (una sola dimensione con 15 valori, da 1 a 16):

my_array = [];
for (i=0; i<16; i++) {
   my_array.push(i+1);
}

// my_array = [1, 2, 3, 4, ..., 15, 16];

E provassi ad inserire con setValues l'array nel range definito:

var sheet = SpreadsheetApp.getActiveSheet();  
sheet.getRange(1, 1, 16, 1).setValues([my_array]);

// il range: getRange(1, 1, 16, 1) indica che l'intervallo inizia dalla riga 1 e dalla colonna 1
// e si estende per 16 righe ed 1 colonna (ovvero le prime 16 righe della colonna 'A')

Riceverei l'errore 'Altezza di intervallo non valida, era di 1 ma dovrebbe essere di 16' in quanto, nonostante gli elementi dell'array siano 16 e la mia intenzione è di inserirli nell'intervallo verticale definito da 16 righe ed una colonna, l'array è monodimensionale e gli elementi sono disposti orizzontalmente.
Se scrivessi invece sheet.getRange(1, 1, 1, 16).setValues([arr_videoId]);, ovvero invertendo il numero di righe considerate con quello delle colonne, non riceverei alcun errore tuttavia gli elementi verrebbero inseriti nella prima riga occupando ognuno una colonna fino ad arrivare a 16 colonne.

La soluzione è quella di creare un array bisimensionale:

var my_array = [];
var j = 0;
for (var i=0; i<16; i++) {
   my_array[j] = [];
   my_array[j].push(i+1);
   j = j + 1;
}

// my_array = [[1], [2], [3], [4], ..., [15], [16]];

Da notare che in questo caso il valore di setValues, essendo già un array di array, non dovrà essere racchiuso da parentesi quadre:

var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(1, 1, 16, 1).setValues(my_array);

Un esempio pratico dove ho utilizzato un array bidimensionale per sopperire all'errore appena descritto si trova nell'articolo 'Recuperare le statistiche di YouTube in modo automatico con Google Apps Script'.

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

0 Commenti

Non ci sono commenti

Nessuno ha ancora commentato questo articolo, fallo tu per primo!

scrivi un 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]http://www.appsscript.it[/url] se devi riferirti ad un indirizzo web