Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌应用程序脚本:onEdit_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 谷歌应用程序脚本:onEdit

Javascript 谷歌应用程序脚本:onEdit,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,首先,我是初学者。我试图在Google Sheets中实现一些自动化,但我遇到了一个有趣但可能很愚蠢的问题:如果我更改另一个特定单元格中的值,如何删除一个唯一单元格或一组单元格的内容?仅当我更改单元格A1的值时,我想删除单元格B1中写入的内容。无论单元格C1、C2、B2或A2上发生了什么,唯一重要的触发器是编辑单元格A1 我试图通过使用事件onEdit(e)来解决这个问题,但是返回的参数“e”不包含任何关于我可以用于比较的列或行的信息,也就是说,发现对单元格A1进行了编辑。这样,我就没有找到任何

首先,我是初学者。我试图在Google Sheets中实现一些自动化,但我遇到了一个有趣但可能很愚蠢的问题:如果我更改另一个特定单元格中的值,如何删除一个唯一单元格或一组单元格的内容?仅当我更改单元格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函数的代码(它工作得很好):


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

getA1Notation()

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

同样的事情,调用的函数更少,大多数信息来自事件对象

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

是的,范围类永远不会等于字符串;电子表格.getActiveRangeList().setValue(“”);spreadsheet.getRange('A1').activate()归结为
e.range.getSheet().getRange(1,2).setValue(“”)对我很有帮助。现在你有了一个字符串,你可以比较它们,这很清楚!我不知道其他的方法(columnStart和rowStart)。我确实有很多东西要学。谢谢你的指导!我发现经常查看实际的事件对象是很有价值的,因为文档中似乎总是有一些不存在的东西。顺便说一句,这些不是方法,它们是值,因此它们可以通过使用电子表格方法来获得它们,从而节省大量时间。
function onEdit(e) {
  if(e.range.columnStart==1 && e.range.rowStart==1) {//same as A1
    e.range.offset(0,1).setValue('');//this is B1
  }
}