【问题标题】:Limiting script variables to specific sheets in Google Sheets将脚本变量限制为 Google 表格中的特定表格
【发布时间】:2015-12-01 17:56:46
【问题描述】:

我有一个可在 Google 表格中运行的脚本。该文档有多个工作表。因此,我希望能够拥有一个能够在所有工作表上自动添加时间戳的脚本。

我已经设法让脚本在所有工作表上运行......但是我希望能够有两个单独的变量列并让它们彼此独立地运行。例如,var cols 会影响 SHEET 1,而 var colx 会影响 SHEET 2。这可能吗?

function onEdit(e) {
var s = e.source.getActiveSheet().getName();
var cols = [8];
var colx = [4, 9, 14];
var curDate = Utilities.formatDate(new Date(), "GMT-5", "M/d HH:mm:ss ") 
var r = e.source.getActiveRange();

if (s !== "SHEET 1" && s !== 'SHEET 2' && s !== 'SHEET 3'|| cols.indexOf(e.range.columnStart) ==-1 && colx.indexOf(e.range.columnStart)    ==-1|| 
!e.range.getValue()) return;
 e.range.offset(0,1).setValue(curDate); 

 };

这里是新手脚本,感谢您的耐心等待。 我在想这将涉及使用 var cols 和 var colx 指定工作表名称,但我不确定这是否是正确的方法。

提前感谢您的帮助!!!!!!

【问题讨论】:

  • 这不是特定于 Google Apps 脚本的问题,您还应该在标签中标记 Javascript。
  • 感谢克里格斯!将标签添加到问题中。

标签: javascript google-apps-script google-sheets


【解决方案1】:

我建议更改您的 if 声明,以便更清楚地了解您要完成的工作。看来您要么正在尝试

  1. 当任何列 除了 colscolx 匹配时应用时间戳,或
  2. colscolx 中定义的列匹配时应用时间戳。

场景 1:应用时间戳,除非列匹配

if (s == "SHEET 1" && cols.indexOf(e.range.columnStart) == -1) {
    e.range.offset(0,1).setValue(curDate); 
} else if (s == "SHEET 2" && colx.indexOf(e.range.columnStart) == -1) {
    e.range.offset(0,1).setValue(curDate); 
} else {
    return;
}

场景 2:仅在列匹配时应用时间戳

if (s == "SHEET 1" && cols.indexOf(e.range.columnStart) != -1) {
    e.range.offset(0,1).setValue(curDate); 
} else if (s == "SHEET 2" && colx.indexOf(e.range.columnStart) != -1) {
    e.range.offset(0,1).setValue(curDate); 
} else {
    return;
}

场景 3:如果单元格为空,则跳过时间戳

if (s == "SHEET 1" && cols.indexOf(e.range.columnStart) != -1 && !e.range.getValue()) {
    e.range.offset(0,1).setValue(curDate); 
} else if (s == "SHEET 2" && colx.indexOf(e.range.columnStart) != -1 && !e.range.getValue()) {
    e.range.offset(0,1).setValue(curDate); 
} else {
    return;
}

希望对你有帮助。

【讨论】:

  • 场景 2 正是我想要的!还没有涉足 else if 语句,但看看你对 if 语句的介绍比我最初的尝试更合乎逻辑。十分感谢你的帮助!我有点只是将这两个语句放在一起,并希望它们能神奇地起作用……问题是它们会在任何地方而不是在限制范围内起作用。再次感谢!!!!!!!!!!!!!!!!!!
  • 您好,Eric,关于您给我的帮助,我想知道您是否介意在您的示例中进一步解释一些内容。具体这部分:else { return;是从我最初的: !e.range.getValue()) 返回;我想知道是否可以保留 !e.range.getValue()) 返回;包含在 if 语句中。例如。 if (s == "SHEET 1" && cols.indexOf(e.range.columnStart) != -1) { !e.range.getValue()) return; e.range.offset(0,1).setValue(curDate); 但这似乎会导致语法错误。这是什么原因造成的?
  • 看起来我可能已经猜到了... if ((s === 'SHEET 1' || s === 'SHEET 2') && cols.indexOf(e.range. columnStart) === -1) { if (!e.range.getValue()) return; e.range.offset(0, 1).setValue(curDate); }
  • 我建议将其集成到现有的 if 语句中。如果单元格为空,您是否尝试返回?我添加了一个可能会有所帮助的“场景 3”。但是,如果您的方法有效,我会说这很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
相关资源
最近更新 更多