我正在创建一个
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
}
这符合我的测试表的预期
但我需要它应用于任何名为“Period(Period Number)_YY Theoretical”的电子表格以及这些电子表格中名为“MMMM-YY”的任何选项卡。我的直觉是,我可以使用正则表达式来检查 getActiveSpreadsheet()
名称是否与条件匹配,并且与
getActiveSheet()
名称相同以填充“sheetsToWatch”数组,但我不确定如何对其进行编码。任何想法?
onEdit(e)
首先,您应该重命名您的
onEdit(e)
函数声明作为合理措施。这将防止函数作为简单触发器和可安装触发器运行两次的风险。
其次,您应该决定如何处理 Apps 脚本配额。一项相关的配额是如果您有许多电子表格,则可能会超出最大执行时间。一种方法是使用电子表格作为控制面板。在此电子表格上,创建要添加触发器的电子表格列表。包含一列来记录添加触发器的状态。您可以创建一个脚本来自动创建此列表,但同样,如果您有太多电子表格,此脚本可能会超出最大执行时间。
然后,创建一个脚本来读取电子表格列表,将可安装的触发器添加到每个没有触发器的电子表格中(为此使用状态列)并更新状态列。