在 Google Sheets onedit 函数中,如果变量单元格值不为空则中止函数

In Google Sheets onedit function, abort function if variable cell value is not blank

我有一个由复选框驱动的搜索页面和一个 Google Sheet 中的 onEdit 函数。它允许用户搜索数据集,select 来自搜索结果的单行(记录),并在承担该记录的责任时附加用户代码。它包括一个对话框,询问他们是否希望在函数执行之前继续。如果是,它将继续并重置。如果否,它会中止并等待新命令。

数据设置为:

Col A Col B Col C Col D Col E
Chkbox Name Age Place User

用户代码数据进入数据集的E列。如果另一个用户已经承担了该记录的责任,我需要的是中止 onEdit 函数。换句话说,假设用户 A 搜索并 select 记录了“Sarah Stout”,然后单击复选框将其编码为“USER A”以对 Stout 女士负责(并且 USER A 将出现在其他任何人的记录中)后续搜索)。但是,用户 B 已经做了同样的事情,因此在 E 列中,它已经显示了用户 B。我希望该函数中止,以便用户 A 从搜索页面覆盖它。

我试过了:

if (NOT(ISBLANK($E))) return;

因为第一个搜索结果会出现在第 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;}

建议

如果我清楚地理解了你的问题,你希望你的 onEdit(e) 函数中止 运行 如果列 E 上的值,基于所选行,已经包含一个用户代码。

示例代码:

You need to add these lines of code after the var sheet = SpreadsheetApp.getActive(); line.

  //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;
  };

示例演示

  • 样本Sheet:

  • 结果:

“用户 A” 选中 Sarah Stout 的框,但 Sarah 的 E 列已经包含 用户 B

一瞬间