Entonces, el usuario marca una casilla de verificación en una hoja y el script:
testNumber ;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: 
¡Agradezco su ayuda!
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
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