是否有更改标签后触发的Google电子表格触发器?

时间:2015-11-24 09:53:57

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

我正在尝试找到一种方法,当标签从Sheet1更改为Sheet2时触发触发器。我认为onChange触发器会这样做,但事实证明它在添加新工作表或删除列/行时起作用。

此致 Saad的

2 个答案:

答案 0 :(得分:0)

没有触发器可以在电子表格中更改任何内容 更改用户正在查看的选项卡是(几乎)纯客户端操作,不会修改后端中的任何属性。

Google Spreadsheets在您查看它们时只是存储所有值,公式和脚本的html表示形式。这个html表示的一部分是表单显示为选项卡。

答案 1 :(得分:0)

onSelectionChange已在April 22, 2020发布。

但是在发布之日无法使用。但是现在,我可以确认必须能够使用它。这样,在当前阶段,可以使用onSelectionChange事件触发器来实现您的目标。

示例脚本如下。

用法

  1. 请将以下示例脚本复制并粘贴到Google Spreadsheet的容器​​绑定脚本中,然后保存该脚本。
  2. 请重新打开Goog​​le Spreadsheet。
    • 通过这种方式,运行onOpen并将当前工作表放入PropertiesService。
    • 不幸的是,在当前阶段,onSelectionChange的事件对象似乎没有有关制表符更改的信息。因此,为了检测选项卡的更改,我使用了PropertiesService。
  3. 然后,请选择一个单元格和工作表上的单元格。
    • 通过这种方式,onSelectionChange由onSelectionChange事件触发器运行,并将A1Notation放置到单元格中。
    • 移动活动选项卡时,示例脚本会检测到此情况,并将更改后的选项卡的信息放入单元格中。

示例脚本:

function onOpen(e) {
  const prop = PropertiesService.getScriptProperties();
  const sheetName = e.range.getSheet().getSheetName();
  prop.setProperty("previousSheet", sheetName);
}

function onSelectionChange(e) {
  const prop = PropertiesService.getScriptProperties();
  const previousSheet = prop.getProperty("previousSheet");
  const range = e.range;
  const a1Notation = range.getA1Notation();
  const sheetName = range.getSheet().getSheetName();
  if (sheetName != previousSheet) {
    range.setValue(`Changed tab from ${previousSheet} to ${sheetName}. ${a1Notation}`);

    // When the tab is changed, this script is run.

  } else {
    range.setValue(a1Notation);
  }
  prop.setProperty("previousSheet", sheetName);
}

结果:

使用上述脚本时,可以如下检测单元格单击和选项卡更改。

enter image description here

注意:

  • 请将此脚本与V8配合使用。

参考文献