【问题标题】:How to update Google Sheet Add-on sidebar dropdown list when sheets are renamed?重命名工作表时如何更新 Google Sheet Add-on 侧边栏下拉列表?
【发布时间】:2020-05-01 15:00:22
【问题描述】:

我正在创建一个 Google 表格插件,用于比较电子表格中的 2 列。用户可以从侧边栏中的下拉列表中选择两列所在的工作表。打开侧边栏时,使用侧边栏 html 中的以下代码填充下拉列表:

  <select id="sheet1">
    <? var sheets=SpreadsheetApp.getActiveSpreadsheet().getSheets(); ?>
    <? for(var i=0;i<sheets.length;i++) { ?>
    <option><?= sheets[i].getName()?></option>
    <? } ?>  
    };
  </select>

但是,如果用户在侧边栏打开时重命名任何 google 表格,则列表不会更新。我不确定如何更新下拉列表的最佳方式。我对在下拉列表旁边放置一个“更新工作表名称”按钮的想法持开放态度,如果这比必须观察电子表格的每一次更改以使其动态发生更好的话。我今天尝试了许多可能的解决方案,但没有成功!感谢所有建议。

【问题讨论】:

  • 在工作表名称更改时刷新整个侧边栏是否可以接受,或者如果发生这种情况可能会丢失其他信息?
  • 是的,刷新侧边栏就可以了 - 你是怎么做到的?
  • 这个问题已经有了答案,但还没有被接受,也没有任何评论。如果您还没有,请阅读stackoverflow.com/help/someone-answers

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


【解决方案1】:

答案:

没有直接的方法可以做到这一点,尽管使用onChange() 触发器可以重新加载侧边栏。

更多信息:

根据文档:

当用户修改电子表格本身的结构时(例如,通过添加新工作表或删除列)运行可安装的更改触发器。

重命名工作表时,会触发onChange() 事件,事件对象中的changeTypeOTHER 会触发。当onChange()检测到这一点时,您可以将侧边栏设置为重新加载。

代码:

function onChange(e) {
  if (e.changeType == "OTHER") {
    showSidebar();
  }  
}

function showSidebar() {
  var html = HtmlService.createTemplateFromFile('Page').evaluate()
      .setTitle('Sidebar title')
      .setWidth(300);
  SpreadsheetApp.getUi().showSidebar(html);
}

设置可安装触发器:

在编辑 > 当前项目的触发器菜单项之后,您将在 G Suite 开发者中心打开一个新页面。点击右下角的+ Add Trigger按钮,进行触发设置如下:

  • 选择要运行的函数:onChange
  • 选择应该运行的部署:Head
  • 选择事件源:From spreadsheet
  • 选择事件类型:On change

然后按保存。

注意:对电子表格结构的任何更改,除了以下列表中的内容,也会触发侧边栏重新加载:

  • EDIT: 范围的内容被改变了
  • INSERT_ROW - 在工作表中插入一行
  • INSERT_COLUMN - 在工作表中插入一列
  • REMOVE_ROW - 从工作表中删除一行(与清除不同)
  • REMOVE_COLUMN - 从工作表中删除一列
  • INSERT_GRID - 电子表格中添加了一个新工作表
  • REMOVE_GRID - 从电子表格中删除一个新工作表
  • FORMAT - 编辑范围的格式(显示格式、背景颜色、字体等)

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多