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:
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'.
Non ci sono commenti
Nessuno ha ancora commentato questo articolo, fallo tu per primo!
scrivi un commento