【问题标题】:How to use onEdit trigger to produce timestamp in a dynamic cell using vlookup?如何使用 onEdit 触发器在使用 vlookup 的动态单元格中生成时间戳?
【发布时间】:2019-11-22 19:45:45
【问题描述】:

我正在尝试建立一个美化的待办事项列表,以便发布到各种工作委员会。我有一张包含所有网站属性的表格,包括每个属性的唯一 ID,以及提交最新帖子的时间列(时间戳将落在哪里)。待办事项列表是一个名为 Posting Tasks 的选项卡,包含相同的唯一 ID,以及一个用于将该帖子标记为已完成的复选框。

Database tab

当发布任务表的 A 列中的单元格为“真”时,我正在使用 onEdit 触发器在数据库表(K 列)上生成时间戳。但是,时间戳固定在相应触发器的行上。我希望它们是基于唯一 ID(触发表中的 C 列和数据库表中的 B 列)的匹配(vlookup)是相对的,因为发布任务表每天都在变化。

Posting tasks

我正在使用以下脚本,但不知道如何将e.range.rowStart 更改为相对并查找相应的值。有什么想法吗?

function onEdit(e) {

    var sheetsToWatch= ['Posting Tasks', 'Database'
                      ],
        columnToWatch = 1,
        columnToStamp = 11;           

    if (e.range.columnStart !== columnToWatch
      || sheetsToWatch.indexOf( e.source.getActiveSheet().getName() ) === -1 
      || !e.value)
        return;
    e.source.getSheetByName('Database')
        .getRange(e.range.rowStart, columnToStamp)
        .setValue(new Date());

}

【问题讨论】:

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


    【解决方案1】:

    试试这个:

    function onEdit(e) {
      e.source.toast('flag1');
      var sh=e.range.getSheet();
      var name=sh.getName();
      if(name=='Posting Tasks' && e.range.columnStart==1 && e.value) {
        e.source.toast('flag2');
        var id=e.range.offset(0,2).getValue();
        var tsh=e.source.getSheetByName('Database');
        var idA=tsh.getRange(3,2,tsh.getLastRow()-2,1).getValues().map(function(r){return r[0]});
        var row=idA.indexOf(id)+3;
        var tsh=e.source.getSheetByName('Database').getRange(row,11).setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy HH:mm:ss"));
      }
    }
    

    安德鲁卡普改装:

    var sh = e.source.getActiveSheet(); 
    if (sh.getName() !== 'Posting Tasks' || e.range.columnStart !== 1 || e.range.rowStart < 3 || e.value !== 'TRUE') return; 
    e.range.offset(0, 0).clearContent() } }
    

    【讨论】:

    • 太棒了,成功了!谢谢! “数据库”选项卡上存在格式问题(时间戳被读取为文本,而不是日期),但我假设这是一个简单的修复。
    • 跟进,如果有人感兴趣,我在@Cooper的解决方案中添加了清晰的内容。这会在选中复选框后立即删除该复选框,将下一个任务推到列表顶部,并带有一个未选中的框:var sh = e.source.getActiveSheet(); if (sh.getName() !== 'Posting Tasks' || e.range.columnStart !== 1 || e.range.rowStart &lt; 3 || e.value !== 'TRUE') return; e.range.offset(0, 0).clearContent() } }
    猜你喜欢
    • 2012-12-07
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    相关资源
    最近更新 更多