Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

177
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!