Debido a los problemas que tiene Google Sheets con la función ImportRange, quería crear un AppScript para reemplazar ImportRange. Soy nuevo en JS pero actualmente tengo lo siguiente:
function My_ImportRange() { var clearContent = SpreadsheetApp.getActive().getSheetByName("Sheet 1").getDataRange().clearContent() var values = SpreadsheetApp.openById('sheet-id'). getSheetByName('name').getRange('A:AI').getValues(); // filtering data var filtered_values = values.filter(filterlogic) SpreadsheetApp.getActive().getSheetByName('Sheet 1'). getRange(2,1,filtered_values.length,filtered_values[0].length).setValues(filtered_values); } var filterlogic = function(item){ return item[0] === "filter 1" && item[6] === "filter 2";};El problema que tengo es que cuando filtro la tabla (con la función filterlogic), los nombres de la primera fila o columna se eliminan debido al filtro .
¿Cómo puedo decirle al filtro que solo ejecute la lógica desde la segunda fila, ignorando los nombres de las columnas?
¡Gracias de antemano!
Utilice el siguiente guión.
Elimine el encabezado usando shift y agréguelo nuevamente después de filtrar usando unshift
// assuming data is in Sheet1 A:H var values = SpreadsheetApp.getActive().getSheetByName("Sheet1").getRange('A:H').getValues(); // remove headers before filtering var headers = values.shift(); // filter values var filtered_values = values.filter(filterlogic) // append back the headers in the first row after filtering filtered_values.unshift(headers); Logger.log(filtered_values)O dígale al filtro que excluya el índice 0, que debería ser la primera fila.
Si filtramos "A" y 10 para la columna A y G:
var filterlogic = function(item, index){ // return true IF condition is met OR index is 0 or the first row. return (item[0] === "A" && item[6] === 10) || index == 0; };Ambas modificaciones excluirán el primer elemento en los valores, que es la primera fila. Elige lo que creas que es mejor. Ambos devolverán los mismos datos.