Google表格:注意并根据添加的新表格进行操作并重命名表格

时间:2014-06-29 14:40:51

标签: google-apps-script google-sheets google-spreadsheet-api

标题是问题。

我正在使用Google云端硬盘中的电子表格,我们在其中找到了一张名为Name registry的中央工作表,其中包含曾经访问某些笔记本电脑的人员的姓名,以便他们将自己的姓名写下来。工作表也会计算各种统计数据。

不同地方的工作表将被命名为特定笔记本的名称。名称注册表通过引用特定名称的单元格来保存我们的编写和修复。

我确定不会像255张一样(这应该是新表格中提升的限制),但我想到了如何让它自动化:

1) Optionally a new sheet is added and the spreadsheet notices it.
2) Once either
2.1) the new sheet is renamed, the `Name registry` will auto-name one of the free columns as the renamed sheet; or
2.2) an old sheet is renamed, the sheet's old column is renamed in the `Name registry`

我确实检查了一些事情,但坦率地说,文档是无脑的,所以唯一的选择就是在自己的资源上使用Google。

例如,https://developers.google.com/apps-script/understanding_events意味着它无论如何都无法完成。

1 个答案:

答案 0 :(得分:0)

你应该知道插入一张纸时确实会触发一个触发器(我猜你所说的是#34;表格#34;在你的问题中)。

重新检查spread sheet Change event的文档,此事件仅在您使用已安装的触发器时触发。使用它(从docs复制)

  1. 打开或创建新的电子表格。
  2. 单击“未保存的电子表格”对话框并更改名称。
  3. 选择工具>脚本编辑器并编写您想要运行的函数。
  4. 选择资源>当前项目的触发器。您会看到一个面板,其中包含“无触发器设置”消息。点击此处立即添加一个。
  5. 点击链接。
  6. 在“运行”下,选择要由触发器执行的功能(例如 myFunction )。
  7. 在“事件”下,选择“来自电子表格”
  8. 从下一个下拉列表中,选择On Change。
  9. 点击保存。
  10. 请注意,此触发器与简单的onEdit触发器不同。

    另外,请记住您的回调函数必须接收事件参数:

    function myFunction(e) {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      ss.getSheetByName("Sheet1").getRange("A1").setValue(e.changeType);
    }
    

    您会看到有不同类型的更改:EDIT,INSERT_ROW,INSERT_COLUMN,REMOVE_ROW,REMOVE_COLUMN,INSERT_GRID,REMOVE_GRID,OTHER。您正在寻找用于插入新工作表的 INSERT_GRID 和用于重命名的 OTHER

    话虽如此,这里的问题是将一张纸的重命名检测为其他类型,因此当您不想这样做时,您可能很容易触发该功能(例如更改背景颜色,还使用OTHER编辑类型激活onChange事件。我的建议是,您不会尝试检测创建/更改,但会创建自定义菜单条目来处理工作表的创建和重命名:

    function onOpen()
    {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var menuEntries = [ {name: "Create sheet", functionName: "createNewSheet"},
                          {name: "Rename current Sheet", functionName: "renameCurrentSheet"}
                        ];
      ss.addMenu("Custom operations", menuEntries);
    }
    
    function createNewSheet()
    {
      // create the new sheet
      // also execute the logic you want when new sheet is created
    }
    
    function renameCurrentSheet()
    {
      // rename current sheet
      // also execute the logic you want when sheet is renamed
    }
    

    希望我对你的问题有所启发。