【发布时间】:2021-10-20 21:13:15
【问题描述】:
这是最奇怪的事情。我有一个简单的触发器 OnSelectionChange 函数,它根据单击的指定单元格发出警报并运行不同的函数。它正在工作。现在它不工作了。有时如果我关闭程序,发誓,然后再次打开它,它会工作,有时不会。它在 90% 的情况下都无法正常工作。
在下面的示例中,如果您在工作表 Units 上并单击标题为 SaveUpdateA1 的单元格区域,它应该会发出警报“为什么这不起作用?”。没发生什么事。执行视图显示“暂停”,然后最终显示“超时”。
示例
function onSelectionChange(e) {
var app = SpreadsheetApp;
var activeSheet = app.getActiveSpreadsheet(); //Get current active spreadsheet
var sheet = e.source.getActiveSheet().getName(); //Gets name of sheet where cell was clicked
//row and column index of active (clicked) cell:
var range = e.range; //Activates range of clicked cell
var rangeA1 = range.getA1Notation(); //Gets A1 notation of clicked cell
var row = range.getRow(); //Gets row # of clicked cell
var col = range.getColumn(); // Gets col # of clicked cell
// UNIT SHEET TRIGGERS:
if(sheet == "Units"){
var sheetUnits = activeSheet.getSheetByName('Units');
//Variables for Buttons to Save/Update, Add New, Vacate/Archive, and Cancel
var SaveUpdateA1 = sheetUnits.getRange('O8:O9').getA1Notation(); //A1 notation of Save/Update button
//Other buttons omitted for this example
//SAVE/UPDATE BUTTON
if(rangeA1 == SaveUpdateA1){
SpreadsheetApp.getUi().alert("Why aren't you working?");
}
如果我用以下代码替换上面代码中的最后一个函数,它可以工作,尽管速度很慢:
if(rangeA1 == SaveUpdateA1){
sheetUnits.getRange('P2').setValue("Wow");
}
我看到一个帖子说它需要是一个可安装的触发器才能使用.getUi().alert(),但后来他们说onSelectionChange 不是一个允许的可安装触发器。 (我需要onSelectionChange,因为我在模拟点击按钮)。
另一个人说.getUi().alert() 应该在onSelectionChange 中工作,但显然不是我的情况。
如果存在.getUi().alert() 的替代方案并且与onSelectionChange 一致工作,我会非常满意。
有谁知道如何解决这个问题或使用替代功能?非常感谢!
【问题讨论】:
-
我认为您可能会遇到限制developers.google.com/apps-script/guides/triggers 要么您正在尝试做一件被禁止的事情,要么您正在做的事情太多以至于您遇到了触发限制。为什么你实际上不使用按钮? (您“插入绘图”,然后使用汉堡菜单将脚本附加到它)。此外,您尝试做的事情的更多背景会有所帮助。
-
运行上面只需要2.7S,所以我认为我没有进入30秒的时间限制。我尝试用 toast 功能替换警报功能,但它仍然不起作用,而 toast 在我的 onedit 触发器中工作得非常好。所以肯定和onSelectionChange有关。我不想在绘图中使用按钮,因为目的是保存/更新数据库。如果您编辑一个单元格并且不按“Enter”然后单击按钮绘图,它将不会更新。都非常令人沮丧。
标签: google-apps-script google-sheets triggers