如何使用vEditup在动态单元格中使用onEdit触发器生成时间戳?

问题描述 投票:0回答:1

我正在尝试建立一个出色的待办事项清单,以发布到各个工作板上。我有一个包含所有网站属性的工作表,其中包括每个属性的唯一ID,以及提交最新帖子的时间(时间戳将到达的列)的列。待办事项列表是一个称为“发布任务”的选项卡,其中包含相同的唯一ID,以及一个复选框,用于将该帖子标记为已完成。

Database tab

我正在使用onEdit触发器在“发布任务”工作表的A列中的单元格为“ true”时在“数据库”工作表(K列)上生成时间戳。但是,时间戳固定在相应触发器的行。我希望它们是相对的,基于唯一ID(触发器工作表中的列C和数据库工作表中的列B)的唯一ID的匹配(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个回答
0
投票

尝试一下:

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

Andrew Karp修改:

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() } }
© www.soinside.com 2019 - 2024. All rights reserved.