根据一个单元格中的更改修改Google电子表格中的时间戳

问题描述:

我一直试图修改在Google表格中修改特定单元格的时间戳。我的最终目标是,如果单元格被编辑为一个值,则修改的时间戳会反映出来,如果单元格的内容被完全删除,则时间戳也会被删除。我现在的剧本是这样的:根据一个单元格中的更改修改Google电子表格中的时间戳

function onEdit() 
{ 
    var s = SpreadsheetApp.getActiveSheet(); 
    if(s.getName() == "Sheet1") { 
    var r = s.getActiveCell(); 
    if(r.getColumn() == 4) { 
     var nextCell = r.offset(0,1); 
     if((nextCell.getValue() == "" && r.value != "") || (nextCell.getValue() != "" && r.value != "")) { 
     nextCell.setValue(new Date()); 
     } else if(nextCell.getValue() != "" && r.value == "") { 
     nextCell.setValue(""); 
     } 
    } 
    } 
} 

现在,这个代码能够时间戳更改为当前的任何修改单元格的情况下,但如果我完全删除单元格的内容,时间戳不删除,它再次改变为当前时间戳。

试试这个:

function onEdit() 
{ 
    var s = SpreadsheetApp.getActiveSheet(); 
    if(s.getName() == "Sheet1") 
    { 
    var r = s.getActiveCell(); 
    var rvalue=r.getValue(); 
    if(r.getColumn() == 4) 
    { 
     var nextCell = r.offset(0,1); 
     if(rvalue != "")) 
     { 
     nextCell.setValue(new Date()); 
     } 
     else 
     { 
     nextCell.setValue(""); 
     } 
    } 
    } 
} 

您也可以像这样做:

function onEdit(e) 
{ 
    if(e.source.getActiveSheet().getName()=="Sheet1") 
    { 
    if(e.range.getColumn()==4) 
    { 
     var nextCell = e.range.offset(0,1); 
     if(e.value!="")) 
     { 
     nextCell.setValue(new Date()); 
     } 
     else 
     { 
     nextCell.setValue(""); 
     } 
    } 
    } 
} 

虽然后者是一个小更难以调试。

注意:项目代码中只能有一个onEdit()。如果你有其他人,那么他们都需要与适当的条件逻辑合并成一个,以防止他们不适当地进行交互。

+0

谢谢库珀。你的程序完美工作。还有一种方法可以记录时间戳中的变化吗?我试图捕捉任务之间的争执。详细说明,将会有一个任务的多个状态记录在一个单元格中。只要有人通过从下拉菜单中选择来更改状态,时间戳就会被修改。我想记录这些时间戳之间的持续时间。附:我尝试了你的回答,但由于我是新来的,我的名声不到1,我的投票不会公开显示。 –

+0

您可以存储时间戳,也可以存储已知列号的行号。然后将该信息存储在文件或其他电子表格中,然后稍后可以回来测量任何行的时间戳之间的时间差。你可能不想在简单的触发器中这样做,因为我相信简单的触发器必须在30秒内结束。 – Cooper