【问题标题】:Google Apps Script: onEditGoogle Apps 脚本:onEdit
【发布时间】:2021-02-15 21:27:01
【问题描述】:

首先,我是初学者。我试图在 Google 表格中进行一些自动化操作,但遇到了一个有趣但可能很愚蠢的问题:如果我更改另一个特定单元格中的值,如何删除唯一单元格或一组单元格的内容?如果我更改单元格 A1 的值,我想删除单元格 B1 中写入的所有内容。无论单元格 C1、C2、B2 或 A2 上发生什么,唯一重要的触发器就是编辑单元格 A1。

我尝试通过使用事件 onEdit(e) 来解决这个问题,但返回的参数“e”不包含任何可用于比较的列或行的信息,即发现版本是针对单元格 A1 制作的。这样一来,我就找不到任何可以用来解决问题的特定条件。

我的代码是:

function onEdit(e) {
  var spreadsheet = SpreadsheetApp.getActive();
  var range = e.range;
  if (range == 'A1'){
    spreadsheet.getRange('B1').activate();
    spreadsheet.getActiveRangeList().setValue("");
    spreadsheet.getRange('A1').activate();
  }
}

正如我所注意到的,“range”永远不会等于“A1”,因为无论我编辑的单元格如何,e.range 方法都会返回“Range”:当我编写“potato”后代码返回 e 的值时在单元格中,这就是屏幕上显示的内容:

{ value=potato, authMode=LIMITED, range=Range, user=, source=Spreadsheet }

还有其他方法可以使用 onEdit 函数来完成我的这项任务吗?或者我应该使用另一个事件吗?有什么建议吗?

这是启发我使用 onEdit 函数的代码(它工作得很好):

function onEdit(e) {
   // Set a comment on the edited cell to indicate when it was changed.
   var range = e.range;
   range.setNote('Last modified: ' + new Date());
}

【问题讨论】:

  • 是的,范围类永远不会等于字符串。
  • 这三个spreadsheet.getRange('B1').activate(); spreadsheet.getActiveRangeList().setValue(""); spreadsheet.getRange('A1').activate(); 归结为e.range.getSheet().getRange(1,2).setValue('');

标签: javascript google-apps-script google-sheets


【解决方案1】:

同样的事情,调用的函数较少,大部分信息来自事件对象

function onEdit(e) {
  if(e.range.columnStart==1 && e.range.rowStart==1) {//same as A1
    e.range.offset(0,1).setValue('');//this is B1
  }
}

【讨论】:

  • 这很清楚!我不知道其他方法(columnStart 和 rowStart)。我肯定有很多东西要学习。感谢您的指导!
  • 我发现总是查看实际的事件对象很有价值,因为那里似乎总是有文档中没有的东西。
  • 顺便说一句,thost 不是方法,而是值,因此与使用电子表格方法获取它们相比,它们可以节省大量时间。
【解决方案2】:

解决了。可以使用以下方法将“范围”的值转换为 A1 表示法:

getA1Notation()

这样我终于可以比较编辑单元格和触发单元格的值了。

【讨论】:

  • 现在你有了一个字符串,你可以比较它们了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
  • 2020-12-25
相关资源
最近更新 更多