我有一個由復選框驅動的搜索頁面和 Google 表格中的 onEdit 函式。它允許用戶搜索資料集,從搜索結果中選擇一行(記錄),并在承擔該記錄的責任時附加用戶代碼。它包括一個對話框,詢問他們是否希望在函式執行之前繼續。如果是,它會繼續并重置。如果否,它將中止并等待新命令。
資料設定為:
| 可樂 | B欄 | 科爾C | 寒冷的 | 科爾E |
|---|---|---|---|---|
| 檢驗盒 | 姓名 | 年齡 | 地方 | 用戶 |
用戶代碼資料進入資料集的 E 列。如果另一個用戶已經承擔了該記錄的責任,我需要的是 onEdit 函式中止。換句話說,假設用戶 A 搜索并選擇“Sarah Stout”的記錄,然后單擊復選框以將其編碼為“用戶 A”以對 Stout 女士負責(用戶 A 將出現在其他任何人的后續搜索中)。但是,用戶 B 已經做了同樣的事情,所以在 E 列中,它已經顯示了用戶 B。我希望函式中止,以便用戶 A 從搜索頁面覆寫它。
我試過了:
if (NOT(ISBLANK($E$6))) 回傳;
因為第一個搜索結果將出現在第 6 行(但第一行帶有復選框),但這不起作用。我只是不明白這里的語法,所以我不知道如何指定列。這是 onEdit 代碼
function onEdit(e) {
if (e.range.columnStart != 1) return;
if (e.value != 'TRUE') return;
var sheet = SpreadsheetApp.getActive();
var ignored_sheets = ['Sheet2','Sheet3','ReportOutput'];
if (ignored_sheets.includes(sheet.getName())) return;
var row_index = e.range.rowStart;
var row = sheet.getRange('B' row_index ':D' row_index).getDisplayValues().flat();
if (row[1] == '') return;
var result = SpreadsheetApp.getUi()
.alert("Do you wish to mark this record?", SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
if (result != SpreadsheetApp.getUi().Button.OK) {
sheet.toast("Request canceled.");
sheet.getActiveCell().setValue(false);
return;}
sheet.toast("Request initiated.");
sheet.getActiveCell().setValue(false);
sheet.getRange('B3').clearContent();
sheet.getSheetByName('ReportOutput').appendRow(row);
sheet.getSheetByName('Sheet1').setActiveCell('B3');
}
有人對如何使這項作業有任何想法嗎?我哪里錯了?
我知道我需要一個 IF 陳述句,并且我知道如果他們在不應該選中該框時我會需要這樣的東西:
{sheet.toast("Unable to overwrite data.");
sheet.getActiveCell().setValue(false);
return;}
uj5u.com熱心網友回復:
建議
如果我清楚地理解了您的問題,您希望您的onEdit(e)函式在 column 上的值E(基于所選行)已經包含用戶代碼時中止運行。
示例代碼:
您需要在該行之后添加這些代碼
var sheet = SpreadsheetApp.getActive();行。
//If the selected row on column E is not blank
if(e.range.getSheet().getRange(e.range.getRow(),5).getValue().length > 0){
sheet.toast("Process aborted.\ \"" e.range.getSheet().getRange(e.range.getRow(),5).getValue() "\" has already taken responsibility for \"" e.range.getSheet().getRange(e.range.getRow(),2).getValue() "\"");
sheet.getActiveCell().setValue(false);
return;
};
示例演示
- 樣品表:
- 結果:
說“用戶 A”選中了框,Sarah Stout但E莎拉的列已經包含用戶 B
一秒鐘后
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/428212.html



