google-apps-script - 编辑特定范围时如何运行函数
问题描述
我有一个功能可以打开一个包含消息和音乐的侧边栏。此功能完美运行,但我希望在showSidebar
编辑某些单元格时运行该功能(“Sheet2”上的 C2:E10)。我尝试了以下代码,但是当在电子表格中的任何位置进行编辑时,它仍然运行该函数。
function onEdit(showSidebar){
var range =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2").getRange(2, 3, 10, 1)
}
整页代码在这里:
function onEdit(e){
var range = e.range;
var sheetName = e.source.getActiveSheet().getSheetName();
if ( // C2:E10 on "Sheet2"
sheetName == "Sheet2" &&
range.rowStart >= 2 &&
range.columnStart >= 3 &&
range.rowStart <= 10 &&
range.columnStart <= 5
) {
showSidebar();
// do something
// showSidebar(); // If you want to run the function of showSidebar(), please use this.
}
}
var SIDEBAR_TITLE = 'Dashboard Notification!';
/**
* Adds a custom menu with items to show the sidebar and dialog.
*
* @param {Object} e The event parameter for a simple onOpen trigger.
*/
function onOpen(e) {
SpreadsheetApp.getUi()
.createAddonMenu()
.addItem('Show sidebar', 'showSidebar')
.addToUi();
}
/**
* Runs when the add-on is installed; calls onOpen() to ensure menu creation and
* any other initializion work is done immediately.
*
* @param {Object} e The event parameter for a simple onInstall trigger.
*/
function onInstall(e) {
onOpen(e);
}
/**
* Opens a sidebar. The sidebar structure is described in the Sidebar.html
* project file.
*/
function showSidebar() {
var ui = HtmlService.createTemplateFromFile('Sidebar')
.evaluate()
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setTitle(SIDEBAR_TITLE);
SpreadsheetApp.getUi().showSidebar(ui);
}
编辑:
将此脚本从我的测试区域复制到实时工作表后,在编辑范围时触发器不再起作用。谁能解释为什么会发生这种情况
解决方案
- 您希望在编辑“Sheet2”上的“C2:E10”单元格时运行该脚本。
- 您正在使用简单触发器的 OnEdit 事件触发器。
如果我的理解是正确的,那么这个示例脚本怎么样?请认为这只是几个答案之一。
示例脚本:
function onEdit(e){
var range = e.range;
var sheetName = e.source.getActiveSheet().getSheetName();
if ( // C2:E10 on "Sheet2"
sheetName == "Sheet2" &&
range.rowStart >= 2 &&
range.columnStart >= 3 &&
range.rowStart <= 10 &&
range.columnStart <= 5
) {
// do something
showSidebar(); // If you want to run the function of showSidebar(), please use this.
}
}
- 当有 3 行的值被放入“E10”时,这些值被放入“E10:E12”的单元格中。在此脚本中,该函数运行。
- 如果您不想在值超出范围时运行,请修改
range.rowStart <= 10 && range.columnStart <= 5
为range.rowEnd <= 10 && range.columnEnd <= 5
.
- 如果您不想在值超出范围时运行,请修改
参考:
如果我误解了您的问题并且这不是您想要的结果,我深表歉意。
添加:
如果该函数包含多个需要授权的方法,请使用 OnEdit 事件触发器和可安装触发器。https://developers.google.com/apps-script/guides/triggers/installable
届时请将函数名修改为fullows。
示例脚本:
在使用此脚本之前,请先安装installableOnEdit
作为 OnEdit 事件触发器的可安装触发器的功能。您可以在此处查看如何安装它。
function installableOnEdit(e){ // Modified
var range = e.range;
var sheetName = e.source.getActiveSheet().getSheetName();
if ( // C2:E10 on "Sheet2"
sheetName == "Sheet2" &&
range.rowStart >= 2 &&
range.columnStart >= 3 &&
range.rowStart <= 10 &&
range.columnStart <= 5 && // Modified
"value" in e // Added
) {
showSidebar();
}
}
- 在这种情况下,函数名称从 修改
onEdit
为installableOnEdit
。- 当
onEdit
作为可安装触发器安装时,简单触发器和可安装触发器都运行。通过将函数名称修改onEdit
为其他名称,可以防止重复运行。
- 当
- 当编辑“Sheet2”上的“C2:E10”单元格时,
showSidebar()
运行。- 而且,当范围内的值被删除时,
showSidebar()
不会运行。
- 而且,当范围内的值被删除时,
推荐阅读
- vue.js - Vue - 从函数显示/创建组件
- mysql - 在指定身份验证插件时更新用户 MySQL 密码的正确语法是什么
- android - 如何正确使用带有对话框的 FragmentResultListener
- c# - C#:获取 3D 数组的 2D 切片的扩展方法是否可行?
- ios - NavigationViewItems 中的按钮不适用于不完整的滑动
- reactjs - 在 React 上生成大型 HTML 字符串 PDF(.net 框架 mvc 作为后端)
- reactjs - 如何使用 TypeScript 更改 react-select 样式选项
- macos - 使用命令按钮的键盘快捷键
- python - 使用 Telethon bot 中的下载按钮将音频上传为即时链接
- visual-studio - Visual Studio 2019 水平移动文本选择类似于垂直移动的键盘快捷键 [Alt + ↑] 和 [Alt + ↓]