当前位置: 首页 > 知识库问答 >
问题:

Google Docs Sheets onChange()-确定更改了哪个工作表

颛孙高义
2023-03-14

我正在使用许多人都可以编辑的谷歌文档表。我需要能够告诉何时改变工作表,即添加或删除行或列。发生此情况时,我能够获得onChange事件,但似乎找不到更改了哪个工作表。该事件包含对SpreadSheet对象的引用,但是getActiveSheet总是返回第一个工作表,而不管哪个工作表处于活动状态。

我创建了一个包含3张工作表的新电子表格,添加了以下脚本并对其进行了授权。

function onOpen() {
  ScriptApp.newTrigger("onChange")
   .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
   .onChange()
   .create();
}
function onChange(e) {
  Logger.log(e)
  Logger.log("Name: " + e.source.getName())
  Logger.log("Active Sheet: " + e.source.getActiveSheet().getName())
  Logger.log("All Sheets: " + e.source.getSheets().map(function(s){return s.getName()}))
}

我去了第2页,删除了一栏。日志显示:

[14-07-17 19:13:32:774 EDT] {changeType=REMOVE_COLUMN, source=Spreadsheet, authMode=FULL}
[14-07-17 19:13:32:861 EDT] Name: Untitled spreadsheet
[14-07-17 19:13:32:944 EDT] Active Sheet: Sheet1
[14-07-17 19:13:32:946 EDT] All Sheets: Sheet1,Sheet2,Sheet3

因此,事件虽然我的工作表2处于活动状态,操作只影响工作表2,但传递给onChange处理程序的事件似乎表明工作表1当时处于活动状态。

我怎样才能知道哪张纸真的变了?

共有1个答案

袁泓
2023-03-14

看起来更改事件不应该返回“source”,即使它在日志中返回了。

我的行为和你一样。我能够得到的工作表名称与'在编辑',但这并不适合你想做什么。

我还尝试使用onedit和onchange触发器的组合,但它们不会同时触发,只能触发其中一个。

这是值得提交的问题跟踪

 类似资料:
  • 我试图构建一个GUI,它有许多按钮(JButton)/下拉项(JMenuItem),当按下每个包含字母的按钮时,相关的字母将添加到标签中。 我无法识别按下了哪个按钮。你能给我一个关于如何做到这一点的提示吗?

  • 我正在使用chart.js绘制多个折线图。当用户点击其中一个图表时,我需要知道是哪个图表。为了捕捉用户的单击,我在图表的中添加了以及一个以在用户单击图表时调用函数。现在我有了这个: null null 每次单击图表时,它都会给出一个(包含每个图表的信息),还会给出一个包含click事件信息的对象。但我似乎找不到信息来断定哪个图表被点击了。我怎么能这么做?

  • 我知道,在Java中的事件驱动程序中,可以找出是什么对象导致了事件(例如,选择了,因此会发生特定的操作)。我的问题是,如果在一个按钮组中有两个,两个按钮都添加了动作侦听器,并且您一直在从一个按钮到另一个按钮中进行选择,那么是否有可能找到以前选择的?换句话说,如果我选择了另一个,在选择当前之前,是否可以编写代码来确定之前选择了哪个? 编辑:我会更具体。我正在创建一个“虚构”的餐厅程序。在其中,我列出

  • 我不明白为什么,如果微调器调用ChangeListener两次。我怎样才能做到只打一次电话? 控制器。JAVA 主要的JAVA 输出:

  • 问题内容: 我有一个带有两个提交按钮和一些代码的表单: HTML: JavaScript: 当然,这两个提交按钮完成不同的事情。有没有一种方法可以找出按下了哪个按钮,所以以后我可以这样做吗? 理想情况下,我不想修改按钮的代码,而只是具有这种行为的纯JavaScript插件。 我知道Firefox具有,但是我找不到其他浏览器的任何内容。 问题答案: 不在提交事件处理程序中,不。 但是您 可以 做的是

  • 我想要一种方法,只更改字段,用户已更改,如果他选择了多行。