2014-12-19 31 views
1

我一直在研究一个包含多个工作表的Google电子表格,我目前的目标是能够在两张表单(以及我可能添加的任何未来表单)上都具有onEdit时间戳,将出现在单元格旁边的列中(例如,如果编辑过的单元格是A1,则时间戳记出现在B1中)。通过将我在这里找到的脚本放在一起,我已经获得了不同程度的成功,希望它们能够发挥出色。目前我有它sorta按照我想要的方式...Google表格时间戳onEdit范围问题

但如果我删除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

它被传播,因为你有那么,一旦你删除任何单元格的值写入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()); 
} 
+0

令人惊叹!感谢您的详细解释。我现在看到发生了什么事情!非常感谢帮助,剧本以我想要达到的确切方式工作! – redpandasuit

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()); 
} 

我假设你想限制冲压到4列2和6(所以编辑在列1,3和5正在做什么?) 如果没有,你可以删除“VAR的cols”和'cols.indexOf ..'-部分

+0

非常感谢您的意见!你的假设是正确的,这是我的意图。我也给你的脚本跑!它也很完美!现在我已经有了比我需要的更多的脚本:)并且学习了这个时间戳的两种剥皮方法!谢谢! – redpandasuit