当活动表格在Google表格中发生变化时是否会触发事件?每次getActiveSheet()的结果发生变化时,我都想调用一个函数来更新我构建的侧边栏中的某些值,以帮助在特别大的Google电子表格中进行导航。
答案 0 :(得分:4)
您可以使用onSelectionChange()
简单触发器。每当选择了新小区时,当活性片改变包括将火。 (这是introduced April 22, 2020,早在提出原始问题之后。)
当用户在电子表格中更改选择时,onSelectionChange(e)触发器将自动运行。大多数onSelectionChange(e)触发器使用事件对象中的信息进行适当的响应。
一个字符串化的事件对象看起来像这样:
{
"authMode": {},
"range": {
"rowEnd": 1,
"columnStart": 1,
"rowStart": 1,
"columnEnd": 1
},
"source": {}, // Represents the spreadsheet itself
"user": {
"nickname": "NICKNAME",
"email": "EMAIL"
}
}
只要活动工作表发生更改(第一次运行时除外),就会显示一个消息框。它还尝试将对作为quota exists的PropertiesService的调用最小化。请注意,它使用工作表ID,因为它们是不可变的,与工作表名称不同。
function onSelectionChange(e) {
if (activeSheetChanged(e.range.getSheet().getSheetId())) {
Browser.msgBox(e.range.getSheet().getName());
}
}
/**
* Check if the active sheet changed.
* Will give a false positive if no value exists in the properties.
* @returns {boolean}
*/
function activeSheetChanged(newSheetId) {
const key = 'activeSheetId';
const cache = CacheService.getUserCache();
let properties;
const savedSheetId = getSavedSheetId();
if (savedSheetId != newSheetId) {
saveSheetId(newSheetId);
return true;
}
return false;
/**
* Get the saved sheet ID from the Cache/Properties.
* @returns {Number}
*/
function getSavedSheetId() {
let savedSheetId = cache.get(key);
if (savedSheetId == null) {
properties = getProperties();
savedSheetId = properties.getProperty(key);
cache.put(key, savedSheetId);
}
return cache.get(key);
}
/**
* Save the sheet ID to the Cache & Properties
*/
function saveSheetId(sheetId) {
properties = properties ? properties : getProperties();
properties.setProperty(key, sheetId);
cache.put(key, sheetId);
}
/**
* @returns {PropertiesService.Properties}
*/
function getProperties() {
return PropertiesService.getUserProperties();
}
}
答案 1 :(得分:2)
要在不同的工作表之间切换时执行代码,可以使用onSelectionChange(e)。例如,以下是在切换到 Sheet1 时执行代码的常规代码模板:
function onSelectionChange(e) {
const as = e.source.getActiveSheet();
if (as.getName() == 'Sheet1'){
// put your code here
}
}
通过这种方式,每次您选择一个不同的工作表时,onSelectionChange(e)
触发和活动工作表都会发生变化。然后,您可以在if条件下使用活动工作表来执行您选择的代码块。