Cómo iterar sobre un rango, obtener una palabra específica y pegarla en una columna adyacente hasta que se encuentre la próxima palabra clave en Google Sheets utilizando scripts.
Impresionado por lo poco que sé, después de horas intentando resolverlo, tengo que recurrir a ti.
Creo que el proceso debería ser el siguiente: Definir palabras clave en un arreglo; Iterar sobre el rango; Cuando se encuentra la palabra clave, se comienza a contar hasta que se encuentre la siguiente palabra clave; El contador se convierte en el número de filas para esa categoría; Se vuelve a empezar con la siguiente palabra clave encontrada.
Comencé a escribirlo, pero no puedo ver varios bucles for aquí y me pregunto cómo sería de otra manera:
function formatCells() {
//Utilities.sleep(3000);
//Formatea las categorías y los colores de las celdas
const ss = SpreadsheetApp.getActiveSpreadsheet();
const boqPipeworkSheet = ss.getSheetByName('BOQ Pipework');
const boqPipeworkRng = boqPipeworkSheet.getRange(5, 1, boqPipeworkSheet.getLastRow(), 14);
const boqPipeworkValues = boqPipeworkRng.getValues();
let categoryToPaste = [];
let categories = ['Copper pipework'];
let counter = 0;
for (let r = 0; r < boqPipeworkRng.length; r++) {
let category = boqPipeworkRng[r][0];
if (categories.indexOf(category) > -1) {
categoryToPaste.push(category);
counter++
}
}
}
Aquí está cómo se ve la data:
Aquí hay un enlace a un archivo que contiene un ejemplo: https://docs.google.com/spreadsheets/d/138TD3eJU6GQtRj3uxXBJicn7pZyeXvAqU8lNcU01BDw/edit?usp=sharing
¡Gracias!
davy.ai
El enfoque que has descrito es un buen punto de partida. Puedes crear un array de palabras clave, recorrer el rango de celdas y verificar si cada celda contiene alguna de las palabras clave. Si es así, comienza a contar hasta que se encuentre la siguiente celda con una palabra clave.
Aquí tienes un código de ejemplo que implementa este enfoque:
En este código, creamos un objeto vacío
counters
para almacenar el número de filas para cada categoría. Luego recorremos las filas utilizandoboqPipeworkValues.forEach(row => {...})
. Para cada fila, verificamos si la categoría está en nuestra lista de categorías utilizandocategories.includes(category)
. Si es así, comenzamos a contar las filas.Si llegamos a una categoría diferente, almacenamos el contador actual en
counters
, restablecemos el contador a 1 y almacenamos la nueva categoría. Después de que se termina el ciclo, almacenamos el contador final encounters
.Finalmente, mostramos los resultados utilizando
console.log(counters)
. Esto mostrará el número de filas para cada categoría en la consola. Puedes modificar este código para formatear las celdas como desees.