如何在 onEdit 触发器上执行 copyTo 后附加时间戳?

How to append a timestamp after a copyTo has been executed on an onEdit trigger?

我正在使用 onEdit 函数触发(除其他事项外)将单行(由两列组成)移动到新 sheet(称为 CAC)的 copyTo。无关紧要,onEdit 触发器也在向不同的 sheet 添加时间戳。我不知道如何在 copyTo 登陆位置右侧的列中的 CAC sheet 中添加另一个时间戳。我假设它是偏移量和在 copyTo 中嵌套某些东西的组合,但经过一段时间的尝试后,无法弄清楚!谢谢!

function onEdit(e) {

  // DUE TODAY 

{
  e.source.toast('Processing...');
  var sh=e.range.getSheet();
  var name=sh.getName();
  if(name=='Posting Tasks' && e.range.columnStart==1 && e.value) {
    e.source.toast('Processing...');
    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(), "MM/dd/yyyy"));
  }

  // Copy to CAC

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet()
  if(ss.getActiveSheet() === 'Posting Tasks'){
        //Get active cell
    var cell = sheet.getActiveCell();
    var cellCol = cell.getColumn();
    var cellRow = cell.getRow(); 
    var exportRange = sheet.getRange(cellRow,2,1,6);
        //Select the paste destination
    var pasteDestination = ss.getSheetByName('CAC');
    var pasteEmptyBottomRow = pasteDestination.getLastRow() + 1;

        //Copy the row to the new destination
    exportRange.copyTo(pasteDestination.getRange(pasteEmptyBottomRow,3),
                       SpreadsheetApp.CopyPasteType.PASTE_VALUES);

        // add timestamp

  }   


  • 您想将时间戳放在 exportRange.copyTo(pasteDestination.getRange(pasteEmptyBottomRow,3), SpreadsheetApp.CopyPasteType.PASTE_VALUES) 复制的值列的右列。

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。

在这个修改中,我使用了offset()

修改后的脚本:

当你的脚本修改后,变成如下。

从:
exportRange.copyTo(pasteDestination.getRange(pasteEmptyBottomRow,3),
                   SpreadsheetApp.CopyPasteType.PASTE_VALUES);
到:
var timestamp = new Date();
var destRange = pasteDestination.getRange(pasteEmptyBottomRow,3);
exportRange.copyTo(destRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES);
destRange.offset(0, exportRange.getNumColumns() - 1, exportRange.getNumRows()).setValue(timestamp);
  • 当您 运行 修改脚本时,时间戳将放在复制值右列的单元格中。

注:

  • 如果您只想将时间戳放在一个单元格中,请将destRange.offset(0, exportRange.getNumColumns() - 1, exportRange.getNumRows()).setValue(timestamp);修改为destRange.offset(0, exportRange.getNumColumns() - 1).setValue(timestamp);
  • 在这种情况下,作为示例,new Date()用作时间戳。因此,日期作为日期对象放入单元格。如果要查看时间,请设置带有日期对象的单元格格式。

参考:

如果我误解了你的问题,这不是你想要的结果,我深表歉意。