如何在工作表重命名时更新 Google Sheet 加载项侧边栏下拉列表?
How to update Google Sheet Add-on sidebar dropdown list when sheets are renamed?
我正在创建一个 Google Sheet 插件来比较电子表格中的 2 列。用户可以从侧边栏的下拉列表中选择 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 工作表,则列表不会更新。我不确定更新下拉列表的最佳方式是什么。我对在下拉列表旁边放置一个 'Update sheet names' 按钮的想法持开放态度,如果这比必须监视电子表格的每个更改以使其动态发生更好的话。我今天尝试了很多可能的解决方案但都没有成功!非常感谢收到所有建议。
答案:
虽然使用 onChange()
触发器可以重新加载边栏,但没有直接的方法可以做到这一点。
更多信息:
根据文档:
An installable change trigger runs when a user modifies the structure of a spreadsheet itself—for example, by adding a new sheet or removing a column.
重命名 sheet 时,事件对象中 OTHER
的 changeType
会触发 onChange()
事件。当 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
- Select 事件来源:
From spreadsheet
- Select 事件类型:
On change
然后按保存。
注意: 对 Spreadsheet 结构的任何更改, 除了以下列表,也会触发侧边栏重新加载:
EDIT
: 范围的内容被改变
INSERT_ROW
- 一行插入到 sheet
INSERT_COLUMN
- 将一列插入 sheet
REMOVE_ROW
- 从 sheet 中删除一行(与清除不同)
REMOVE_COLUMN
- 从 sheet 中删除一列
INSERT_GRID
- 新的 sheet 添加到 Spreadsheet
REMOVE_GRID
- 新的 sheet 从 Spreadsheet 中删除
FORMAT
- 编辑范围的格式(显示格式、背景颜色、字体等)
参考文献:
我正在创建一个 Google Sheet 插件来比较电子表格中的 2 列。用户可以从侧边栏的下拉列表中选择 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 工作表,则列表不会更新。我不确定更新下拉列表的最佳方式是什么。我对在下拉列表旁边放置一个 'Update sheet names' 按钮的想法持开放态度,如果这比必须监视电子表格的每个更改以使其动态发生更好的话。我今天尝试了很多可能的解决方案但都没有成功!非常感谢收到所有建议。
答案:
虽然使用 onChange()
触发器可以重新加载边栏,但没有直接的方法可以做到这一点。
更多信息:
根据文档:
An installable change trigger runs when a user modifies the structure of a spreadsheet itself—for example, by adding a new sheet or removing a column.
重命名 sheet 时,事件对象中 OTHER
的 changeType
会触发 onChange()
事件。当 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
- Select 事件来源:
From spreadsheet
- Select 事件类型:
On change
然后按保存。
注意: 对 Spreadsheet 结构的任何更改, 除了以下列表,也会触发侧边栏重新加载:
EDIT
: 范围的内容被改变INSERT_ROW
- 一行插入到 sheetINSERT_COLUMN
- 将一列插入 sheetREMOVE_ROW
- 从 sheet 中删除一行(与清除不同)REMOVE_COLUMN
- 从 sheet 中删除一列
INSERT_GRID
- 新的 sheet 添加到 SpreadsheetREMOVE_GRID
- 新的 sheet 从 Spreadsheet 中删除
FORMAT
- 编辑范围的格式(显示格式、背景颜色、字体等)