Necesito extraer datos de esta otra hoja donde el encabezado se repetirá por la cantidad de elementos debajo de él. Hasta ahora, solo puedo hacer esto con la primera columna de la fuente de datos y parece que no puedo obtener el código correcto donde el bucle pasará a la siguiente columna una vez que detecte la primera celda vacía de la columna anterior.

Aquí es donde me estoy atascando
function filter(){ var sheet = SpreadsheetApp.getActiveSpreadsheet() var data = sheet.getSheetByName("data") var filter = sheet.getSheetByName("filter") var dataRange = data.getDataRange().getValues(); var dataLr = data.getLastRow(); var dataLc = data.getLastColumn(); var row = 1 var col = 1 for(var i=1; i < dataRange.length; i++){ let targetAppName = filter.getRange(i+1,1) let targetQname = filter.getRange(i+1,2) targetQname.setValue(dataRange[i]) targetAppName.setValue(dataRange[0][0]) } }Estoy tratando de obtener estos resultados en otra pestaña de la hoja:
|Nombres | Sujetos | |:—————|:———————-:|
|Michael Lowry| trigonometría|
|Michael Lowry| biología|
Y así sucesivamente, hasta que lea todas las columnas y filas del rango de datos.
function loopthroughteachcolumnofarow() { const ss = SpreadsheetApp.getActive(); const sh = ss.getActiveSheet(); const vs = sh.getDataRange().getValues(); vs.forEach((r,i) => { r.forEach((c,j) => { //c is the value for vs[i][j]; }) }) }