Google表格编辑时间戳onEdit范围问题

时间:2014-12-19 20:47:43

标签: google-apps-script google-sheets

我一直在处理包含多张工作表的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());
}

2 个答案:

答案 0 :(得分:2)

因为你已经写了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());
}

答案 1 :(得分:1)

或者,您也可以尝试:

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