因此,用戶勾選作業表和腳本中的復選框:
- 獲取該行的 col A 資料為
testNumber; - 在單獨的表格中查找它;
- 修改它的一些元素;
- 將其作為新記錄添加到單獨作業表的底部。
問題是當快速勾選多個復選框時,它會正確添加修改后的陣列,但會在底部添加更多空行,我在下面的腳本中找不到導致該問題的原因。
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();
}
}
這是最后一次嘗試中的奇怪行為:

感謝您的幫助!
uj5u.com熱心網友回復:
描述
我不認為 LockService 正在做您對簡單觸發器 onEdit() 的期望。
我創建了一個簡單的 onEdit() 腳本并嘗試在電子表格中快速輸入。它有時會起作用,但隨后會出錯而沒有做它應該做的事情,但隨后又恢復了。
在return HTMLService()電子表格背景關系中也不做任何事情。
我相信多個 onEdit() 可以異步運行并忽略 LockService。
螢屏截圖
初始資料

錯誤資訊

結果資料

腳本
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);
}
}
參考
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/441624.html
下一篇:降低腳本的處理成本
