如何使用onEdit事件返回已编辑单元格的范围?

时间:2012-10-21 05:26:53

标签: google-apps-script

这似乎应该很容易,但我似乎无法让我的任何小测试实现工作。最终目标是创建仅在编辑特定范围内的单元格时运行的函数。为了实现这一点,我正在创建一个在每次编辑时运行的函数,但是首先检查已编辑单元格的范围是否在一定范围内,并且如果这是真的则仅执行其余代码,否则,它马上结束。

在我看来,这样做的第一步是找出如何返回已编辑单元格的范围。我尝试了各种测试。

这是当前版本,我通过编辑电子表格进行测试:

function onEdit(e){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var eRange = e.range;
var message = eRange.getA1Notation();
ss.toast(message);
}

(输出:吐司不出现/没有发生)

我在这里发布了大约10个其他版本,但我意识到它没有帮助。

我已经设法在我的toast消息中返回[object Object]和[undefined],所以我知道我的toast函数没有发生一些愚蠢的错误。

e.range不返回范围吗?那是我出错的地方吗?如果它返回一个范围,我不应该使用范围内的任何方法,就好像我使用了类似“ss.getRange(”A1“)。someMethod()”?或者是否有一些我不理解的差异?

好吧,我知道我在这里问过几个不同的问题 - 我只是想更清楚地了解我的思考过程,以防它帮助你纠正我错在哪里。简单的问题是:我可以使用哪种命令或方法来返回已编辑单元格的范围?

我很遗憾地提出这样一个基本问题。我真的害怕有人会输入正确的搜索词组合,答案就会在结果的顶部......但我似乎无法自己找到它,所以我在这里。我已经尝试了StackOverflow和旧的Google网上论坛支持论坛的大量代码片段,以及我自己的很多尝试。我看到人们在这里问了很多关于我最终目标的类似问题 - 如果编辑了某个范围内的细胞,那么只运行onEdit功能 - 但答案更复杂,似乎适合每个人的情况,他们不会适合我的。我确定答案就在那里,但我现在已经连续三个晚上寻找并发现了许多类似的问题,而且似乎无法让我自己实施这些建议。感谢您对我的耐心,非常感谢您提供的任何答案!

1 个答案:

答案 0 :(得分:4)

这里是代码(稍加修改)from the doc

function onEdit(event){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  r.setComment("Last modified: " + (new Date())+' by '+Session.getActiveUser());
  ss.toast('Last cell modified = '+r.getA1Notation()+' by '+Session.getActiveUser());
}