谷歌表格时间戳编辑范围问题



我一直在研究一个包含多个工作表的 Google 电子表格,我目前的目标是能够在两个工作表(以及我可能添加的任何未来工作表(上都有一个 onEdit 时间戳,该时间戳将出现在单元格旁边的列中(例如,如果编辑的单元格为 A1,则时间戳出现在 B1 中(。我把我在这里找到的剧本推到一起,希望它们能玩得很好,取得了不同程度的成功。目前,我让它以我想要的方式工作......

但是如果我删除 B1 中新创建的时间戳,那么它将在 C1 中

产生一个新的时间戳,如果我删除 C1,那么它会出现在 D1 中,依此类推。有没有办法防止在删除单元格内容时产生时间戳?

function onEdit(e) {
    var s = SpreadsheetApp.getActiveSheet();
    var cols = [1, 3, 5]
    if (s.getName() == "Sheet1")
    s.getRange(e.range.rowStart, e.range.columnStart + 1)
    .setValue(new Date());
    if (s.getName() == "Sheet2")
    s.getRange(e.range.rowStart, e.range.columnStart + 1)
    .setValue(new Date());
}

它正在传播,因为你已经编写了 e.range.coloumnStart + 1。因此,一旦您删除任何单元格的值,就会触发 onEdit((。因此,该单元格将计为第一列,并且它将相对更新下一个单元格的值。若要在发生删除时停止传播到下一个单元格,不应在删除时更新下一个单元格值。

为此,您可以通过以下方式进行操作(我不知道您的确切要求是什么,但此代码将适用于您当前的需求(

function onEdit(e) {
    var s = SpreadsheetApp.getActiveSheet();
    var cols = [1, 3, 5];
    if (s.getName() == "Sheet3" && e.range.getValue() != '')
      s.getRange(e.range.rowStart, e.range.columnStart+1).setValue(new Date());

    if (s.getName() == "Sheet4" && e.range.getValue() != '')
      s.getRange(e.range.rowStart, e.range.columnStart+1).setValue(new Date());
}

或者,您也可以尝试:

function onEdit(e) {
var s = e.source.getActiveSheet().getName();
var cols = [1, 3, 5];
if (s !== 'Sheet1' && s !== 'Sheet2' || cols.indexOf(e.range.columnStart) ==-1 || !e.value) return;
e.range.offset(0,1).setValue(new Date());
}

我假设您想将冲压限制在第 2、4 和 6 列(所以对于在第 1、3 和 5 列中进行的编辑?如果没有,您可以删除"var cols"和"cols.indexOf."。-.part

最新更新