He estado usando la respuesta de Yuri a una pregunta, pero me encontré en una nueva situación y no he entendido muy bien cada paso de este método aquí:
function myFunction() { var sheet = SpreadsheetApp.getActiveSheet(); var header = sheet.getDataRange().getValues()[0]; var data = [ ["ID","Variação","Nome Site","Obs"], [11602,185,"Camisa Teste","Teste da Observação"] ] var indexes = header.map(x => data[0].indexOf(x)); data = data.map(x => indexes.map(i => x.slice()[0] = x[i])); sheet.getRange(1, 1, data.length, data[0].length).setValues(data); }Así es como se ve el resultado:
let result = [ ["ID","Variação","Nome Site","Obs", "", ""], [11602,185,"Camisa Teste","Teste da Observação", "", ""] ] Ahora, esto está devolviendo data con valores nulos. ¿Cómo puedo hacer que devuelva solo elementos de matriz mapeados? Entonces, en lugar de tener una longitud de matriz de 6, serían solo 4. Resultado esperado:
let expectedResult = [ ["ID","Variação","Nome Site","Obs"], [11602,185,"Camisa Teste","Teste da Observação"] ]¡Gracias!
Una posible razón por la que tiene elementos nulos en su matriz es que las celdas al lado de su encabezado tienen " " o un carácter de espacio. Dado que está utilizando getDataRange() , también incluirá esos " " caracteres en su matriz.
Ejemplo:
Aquí, agregué un carácter de espacio a las celdas E1 y F1 :
Estos son los valores de data después de usar la función de mapa:
Si elimino los valores de las celdas E1 y F1 , la salida de datos es:
Los valores nulos también pueden ocurrir si los valores debajo del encabezado se superponen con el número de columnas en su encabezado.
Ejemplo:
Producción:
Solución:
En lugar de usar getDataRange() , defina explícitamente el rango que está usando para el encabezado. Puede usar getRange(row, column, numRows, numColumns) o getRange(a1Notation) .
Una forma es filtrar los valores internos:
let result = [ ["ID", "Variação", "Nome Site", "Obs", "", ""], [11602, 185, "Camisa Teste", "Teste da Observação", "", ""] ] result = result.map(x => x.filter(y => y)) console.log(result) function test() { Logger.log(JSON.stringify([1,2,3,null,4,null,5,''].filter(e => e))) } Execution log 7:48:37 PM Notice Execution started 7:48:37 PM Info [1,2,3,4,5] 7:48:38 PM Notice Execution completed