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

176
Vistas
¿Por qué se agregan más filas que los valores (matriz 2D) establecidos cuando una celda se edita rápidamente?

Entonces, el usuario marca una casilla de verificación en una hoja y el script:

  1. obtiene los datos de la columna A de esa fila como testNumber ;
  2. lo busca en una hoja aparte;
  3. modificar algunos de sus elementos;
  4. agrega eso como un nuevo registro al final de la hoja separada.

El problema es que cuando se marcan rápidamente varias casillas de verificación, agrega las matrices modificadas correctamente, pero agrega más filas vacías en la parte inferior y no puedo encontrar la causa en el siguiente script.

 function onEdit(e) { const thisRow = e.range.getRow(); const thisCol = e.range.getColumn(); const cellVal = e.range.getValue() if (e.range.getSheet().getName() === 'Search By Name' && thisCol === 7 && thisRow > 5 && cellVal === true && e.range.offset(0, -4).getValue() != '') { const lock = LockService.getScriptLock(); try { lock.waitLock(3000); // wait 03 seconds for others' use of the code section and lock to stop and then proceed } catch (e) { Logger.log('Could not obtain lock after 03 seconds.'); return HtmlService.createHtmlOutput("<b> Server Busy. Please try after some time <p>"); } const testNumber = e.range.offset(0, -6).getValue(); const dbSheet = e.source.getSheetByName('Database') const data = dbSheet.getRange(2, 1, dbSheet.getLastRow(), 12).getValues(); let filteredperson = data.filter(e => e[11] == testNumber); const timeStamp = Utilities.formatDate(new Date(), Session.getTimeZone(), "MM/dd/yyyy HH:mm:ss"); let maxNumber = Math.max.apply(null, dbSheet.getRange(2, 12, dbSheet.getLastRow(), 1).getValues()); maxNumber = maxNumber + 1 filteredperson[0][0] = timeStamp filteredperson[0][11] = maxNumber filteredperson[0][12] = '' filteredperson[0][13] = '' filteredperson[0][14] = '' const lastRow = lastRowForColumn(dbSheet, 1); dbSheet.getRange(lastRow + 1, 1, 1, filteredperson[0].length).setValues(filteredperson); e.range.setValue(false); lock.releaseLock(); } }

Aquí está el comportamiento extraño, en el último intento: ingrese la descripción de la imagen aquí

¡Agradezco su ayuda!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Descripción

No creo que LockService esté haciendo lo que espera para un simple activador onEdit().

Creé un simple script onEdit() e intenté escribir muy rápido en una hoja de cálculo. Algunas veces funciona, pero luego se produce un error sin hacer lo que se suponía que debía hacer, pero luego se reanuda.

Además return HTMLService() no hace nada en el contexto de la hoja de cálculo.

Creo que varios onEdit() pueden ejecutarse de forma asíncrona e ignorar LockService.

capturas de pantalla

Datos iniciales Datos iniciales

Mensaje de error Mensaje de error

Datos resultantes Datos resultantes

Guion

 function onEdit(e) { try { var lock = LockService.getScriptLock(); try { lock.waitLock(5000); } catch(err) { SpreadsheetApp.getUi().alert(err); return; } Utilities.sleep(2000); e.range.offset(0,1).setValue(e.oldValue); lock.releaseLock(); } catch(err) { SpreadsheetApp.getUi().alert(err); } }

Referencia

about 4 years ago · Juan Pablo Isaza 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