使函数在满足特定条件的所有电子表格上运行

问题描述 投票:0回答:1

我正在创建一个

onEdit(e)
脚本,以在指定用户编辑 Google 电子表格中的单元格(特定列中)后突出显示它们。问题是,我需要将其应用于具有特定命名约定的“所有电子表格”,以及这些电子表格中具有特定命名约定的“所有选项卡”。我不想编辑所有电子表格,也不希望它应用于这些电子表格中的所有选项卡。 这是我到目前为止的代码(部分复制自有没有办法自动突出显示谷歌表格中所做的更改):

function onEdit(e) { var sheetsToWatch = ['Template Week']; var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var cell = sheet.getActiveCell(); var column = cell.getColumn(); var sheetName = sheet.getName(); var matchFound = false; var user = e.user; var email = user.getEmail(); if(email == '[email protected]' && column == 7) //if user is Example and editing in Column G - Small Listed Price { for (var i = 0; i < sheetsToWatch.length; i++) { if (sheetName.match(sheetsToWatch[i])) matchFound = true; } } if (!matchFound) return; // if not found end //if found execute color change var rowColLabel = sheet.getRange(cell.getRow(),cell.getColumn()).setBackground('#ff9900'); //set backgorund color in orange } 这符合我的测试表的预期

https://docs.google.com/spreadsheets/d/18WVMkkoQViEXXXisXfwTA1ZLY52Zn2ysNa3J8O05MzY/edit?usp=sharing

但我需要它应用于任何名为“Period(Period Number)_YY Theoretical”的电子表格以及这些电子表格中名为“MMMM-YY”的任何选项卡。我的直觉是,我可以使用正则表达式来检查 getActiveSpreadsheet() 名称是否与条件匹配,并且与

getActiveSheet()

名称相同以填充“sheetsToWatch”数组,但我不确定如何对其进行编码。任何想法?

    

onEdit(e)
javascript regex google-sheets google-apps-script triggers
1个回答
0
投票

首先,您应该重命名您的

onEdit(e)
函数声明作为合理措施。这将防止函数作为简单触发器和可安装触发器运行两次的风险。

其次,您应该决定如何处理 Apps 脚本配额。一项相关的配额是如果您有许多电子表格,则可能会超出最大执行时间。一种方法是使用电子表格作为控制面板。在此电子表格上,创建要添加触发器的电子表格列表。包含一列来记录添加触发器的状态。您可以创建一个脚本来自动创建此列表,但同样,如果您有太多电子表格,此脚本可能会超出最大执行时间。

然后,创建一个脚本来读取电子表格列表,将可安装的触发器添加到每个没有触发器的电子表格中(为此使用状态列)并更新状态列。

© www.soinside.com 2019 - 2024. All rights reserved.