sheets sheet scripts script google getrange delete apps app javascript google-apps-script google-spreadsheet

javascript - sheet - Completa un rango(varias columnas) en varias filas-google-apps-script



google apps script hide sheet (2)

Tuve éxito llenando una sola columna (A) con el valor encontrado en el rango A1 ...

var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var lastRow = ss.getDataRange().getNumRows(); var rngVal = ss.getRange("A1").getValue() ss.getRange("A2:A"+lastRow).setValue(rngVal)

Entonces pensé que estaba en easy-street e intenté modificarlo / aplicarlo a un rango más amplio llenando un rango de varias columnas con los valores que se encuentran en el rango C1: H1 ...

var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var lastRow = ss.getDataRange().getNumRows(); var rngVal = ss.getRange("C1:H1").getValues() ss.getRange("C2:H"+lastRow).setValues(rngVal)

Aparentemente hay algo más de esto que simplemente dar una "S" al final de la palabra "Value".

El error dice lo siguiente:

Altura de rango incorrecta, era 1 pero debería ser 10

(FYI: var lastRow = 11)

Por cierto, no obtengo ningún error si uso Value en lugar de Value s , aunque termino con celdas llenas del valor encontrado solo en el rango C1.

Así que estoy cerca ... o muy lejos. Uno de esos.

¿¿¿Ayuda???


Ok, parece que lo hace ...

var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var lastRow = ss.getLastRow() var rngVal = ss.getRange("C1:H1").getValues() for (var x=1; x<=lastRow; x++) { ss.getRange("C"+x+":H"+x).setValues(rngVal);


El mensaje de error es bastante explícito ... el tamaño de la matriz debe caber en el rango en getValues ​​y setValues. Pruébalo así:

function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var lastRow = ss.getLastRow() var rngVal = ss.getRange("C1:H"+lastRow).getValues();// get an array of 10 "rows" and 6 "columns" ss.getRange("C2:H"+(lastRow+1)).setValues(rngVal);//write back this array to a range that has the same size. (starting from Row2 it must ends on lastRow+1 to keep the same number of "rows" }

Esta función cambiará el rango C1: H última fila a C2: H lastRow + 1, no estoy seguro de que sea muy útil, pero ese no es el punto aquí ;-)

EDIT: lo siento, no entendí exactamente su requisito ... aquí hay un código que reproduce datos de C1: H1 en todas las filas a continuación

function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var lastRow = ss.getLastRow() var rngVal = ss.getRange("C1:H1").getValues();// get an array of the first row var rowData = rngVal[0] var newData = [] for(n=1;n<lastRow;++n){newData.push(rowData)} ss.getRange("C2:H"+lastRow).setValues(newData);//write back this array to a range that has the same size. (starting from Row2 it must ends on lastRow+1 to keep the same number of "rows" }

EDIT2 siguiendo tu comentario a continuación:

Una palabra de explicación:

Al usar range.getValues() obtenemos una matriz de 2 dimensiones, lo que significa una matriz de matrices que se puede representar de la siguiente manera: [[data1,data2,data3],[data4,data5,data6]] data1, 2 & 3 son el valor de la primera matriz (índice 0) y los datos 4,5 y 6 son los valores de la segunda matriz (índice 1). Entonces, si desea obtener los valores en la primera matriz, debe escribirlos de esta manera: value = arrayName[0] y esto devolverá una matriz de una dimensión [data1,data2,data3] , eso es lo que utilicé para obtener rowData.

Ahora necesitamos obtener una matriz de 2 dimensiones nuevamente para poder volver a escribir los datos nuevos en un rango en la hoja de cálculo. Por lo tanto, creamos una nueva matriz ( var newData=[] o var newData = new Array() hace exactamente lo mismo), y en el ciclo for agregamos la matriz rowData a esta nueva matriz ... el resultado será una matriz de arrays, que es en realidad lo que estábamos buscando y podemos escribir esto directamente en la hoja en una única sentencia setValues .