【问题标题】:Google Sheets: OnEdit match and clear scriptGoogle 表格:OnEdit 匹配和清除脚本
【发布时间】:2020-02-23 17:29:54
【问题描述】:

如果 Col L 中的单元格值与 Col A 中的单元格不匹配,我希望创建一个“onEdit”函数从行中清除单元格(Col L 到 Col O)。

Col A = "ID"
Col L = "ID Match"

Col A 到 Col K 是一个导入范围。 Col L 到 Col O 是一个静态范围。这个静态范围有一个 onEdit 函数,它根据 Col L 的变化对行进行排序。它与 Col A 同步。

我是脚本编辑器的新手,如果您有时间提供帮助,我们将不胜感激。

我很想打开该文档,但其中包含敏感信息并且太复杂而无法重写。

【问题讨论】:

  • 我不明白你现在的onEdit在做什么:sorts the row based on changes to Col L。另外,It is in sync with Col A 是什么意思?如果我理解正确,如果 L 列中的相应值与 A 列中的相应值不匹配,您想从一行中清除单元格 (L-O)?跟sorting the rowssync with Col A有什么关系?
  • 我发布了一个答案。我不确定这是否是您想要的,所以请告诉我这是否适合您!
  • 我会尽快测试一下。我认为从您的评论中可能是正确的。你说得对,我想清除单元格(L-O)。我希望避免的是,例如,如果 A15 中有相应的数字,则删除单元格(L14-O14)。
  • 单元格(A-K)按 A 列排序。单元格(L-O)按 L 列排序。如果有人删除了原始导入范围(在单元格 A-K 中)中的一行,那么它将从工作表数据集中删除。这会使其余数据不同步。

标签: google-sheets


【解决方案1】:

如果我理解正确,您希望跟踪 L 列中的更改,以便如果 L 列中的编辑值与 A 列中的任何值匹配,则 L-O 列中的内容将被清除。

如果是这种情况,您可以执行以下操作:

function onEdit(e) {
  var range = e.range;
  var sheet = range.getSheet();
  var sheetName = "Sheet1" // Name of the sheet to track. Please change accordingly
  var column = range.getColumn();
  var row = range.getRow();
  var editedValue = range.getValue();
  var colA = sheet.getRange(1, 1, sheet.getLastRow()).getValues().map(function(row) { 
    return row[0]; // Get array of values in column A
  });
  // Check that the edited sheet is the one you want to track.
  // Check that edited column is L
  // Check that the edited value is not found in column A
  if (sheet.getName() === sheetName && column === 12 && colA.indexOf(editedValue) === -1) {
    sheet.getRange("L" + row + ":O" + row).clearContent();
  }
}

注意:

onEdit 触发器只会被用户的更改触发。脚本或以任何其他方式导入的数据所做的更改不会触发编辑。如果您想跟踪这一点,我建议您改为使用time-based trigger

参考:

【讨论】:

  • 这是一个很好的功能,并且非常接近我的需要。但不是我想要的。
  • 它目前删除直接相关的单元格(例如,单元格 L14 与 A14),而不是与行中任何内容相关的单元格(例如,单元格 L14 与单元格 A13 匹配,所以不要删除)。当(例如,单元格 L14 与 Col A 中的任何内容都不匹配)时,我想要删除。
  • OnEdit 没有按我的预期工作。因此,在导入范围的源处删除一行似乎不算作编辑。不确定这是否意味着我的目标根本不可行,或者是否有办法解决这个问题。
  • 为了提供帮助,我在 Col P 中编写了一个 TRUE 或 FALSE 公式。`=IFS( COUNTIF($A$3:$A,$L3)=1,TRUE, $L3="", "", COUNTIF($A$3:$A,$L3)=0,FALSE, COUNTIF($A$3:$A,$L3)>1,"ERROR")' 所以有了这个公式,我只需要基于 Col P 中的更改(为 FALSE)删除 Cells (L-P) 的解决方案。
  • "感谢您的反馈!声望低于 15 人的投票将被记录,但不要更改公开显示的帖子得分。" - 我已经给你投了赞成票,并在解决方案上打了勾。但它不显示,由于我的水平。再次感谢您所做的一切。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多