Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

409
Vistas
Script de aplicaciones de Google: ¿por qué no se ejecuta mi for-loop?

Estoy tratando de escribir un script simple para borrar los valores de un rango específico de Hojas de cálculo de Google [H29: H] si el color de fondo de la celda = #ffff00. Si bien la secuencia de comandos no devuelve ningún error, no realiza ningún cambio en las celdas que cumplen con esos criterios (ni en ningún otro lugar de la hoja). ¿Alguna orientación sobre dónde me estoy equivocando?

 function resetCells() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('Test Sheet'); var rangeData = sheet.getDataRange(); var lastRow = rangeData.getLastRow(); var searchRange = sheet.getRange('H29:H'); var rangeColors = searchRange.getBackgrounds(); for ( i = 29 ; i < lastRow - 1; i++){ if(rangeColors[i][8] === '#ffff00'){ sheet.getRange(i,8).clearContent(); }; }; }
about 4 years ago · Santiago Gelvez
2 Respuestas
Responde la pregunta

0

Cuando vi su secuencia de comandos, pensé que el índice de rangeColors podría no corresponder a i en el bucle for a. Pensé que esta podría ser la razón de su problema. En este caso, ¿qué tal la siguiente modificación?

Guión modificado:

De:

 for ( i = 29 ; i < lastRow - 1; i++){ if(rangeColors[i][8] === '#ffff00'){ sheet.getRange(i,8).clearContent(); }; };

A:

 for (i = 0; i < rangeColors.length; i++) { if (rangeColors[i][0] === '#ffff00') { sheet.getRange(i + 29, 8).clearContent(); } }

o, en su situación, cuando sheet.getRange(i + 29, 8).clearContent() se usa fuera del ciclo, el costo del proceso podría reducirse un poco. En este caso, modifique de la siguiente manera.

 var rangeList = rangeColors.reduce((ar, [h], i) => { if (h === '#ffff00') ar.push("H" + (i + 29)); return ar; }, []); sheet.getRangeList(rangeList).clearContent();
  • En esta modificación, cuando el color de fondo de la celda de la columna "H" es #ffff00 , el contenido de la celda es claro.

Referencia:

  • Lista de rango de clases
about 4 years ago · Santiago Gelvez Denunciar

0

que hiciste mal

En rangeColors[i][8] , asumía rangeColors relacionados con las celdas de la hoja de cálculo. Pero en realidad se relacionan con el searchRange de búsqueda que hiciste. Entonces rangeColors[i][8] debería ser rangeColors[i][0] . Donde i en 0 .

Para que sea "muy divertido" para usted, rangeColors es una matriz indexada en base cero. Y cuando está trabajando con un rango, puede recuperar la primera celda con range.getCell(1, 1) , no range.getCell(0, 0) .

Debido a que me dejé llevar un poco, escribí esta solución (puede ser un extra interesante para leer)

No creo que mapear una matriz de matrices ( rangeColors ) a un rango sea una excelente manera de hacer esto; Es difícil hacer un seguimiento de lo que está haciendo su código.

Lo que hice fue:

  1. Crear un rango para comprobar
  2. Genere números de columna y fila para todas las celdas del rango. Tenga en cuenta que estos son relativos al rango, no a la hoja de estilo. Entonces range.getCell(1, 1) es la celda superior izquierda en el rango . Este es el (principal) error que cometiste en tu código.
  3. Haz lo que quieras con cada celda individual del rango.

código:

 resetCells( '#ffff00' ); function resetCells( color ) { const app= SpreadsheetApp.getActiveSpreadsheet(); const sheet = app.getSheetByName('Sheet1'); const range = sheet.getRange('F4:F50'); for( let row = 1; row < range.getNumRows() + 1; row++ ) { for( let column = 1; column < range.getNumColumns() + 1; column++ ) { const cell = range.getCell( row, column ); if( cell.getBackground() === color ) cell.clearContent(); } } }

Descargo de responsabilidad: nunca antes usé este google-app-script. Así que puede que haya hecho algo mal en cuanto a rendimiento; iterar una gran cantidad de celdas toma un poco de tiempo;

about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda