从 google 表单编辑回复后获取创建和修改日期

Get created and modified date after editing response from google forms

function assignEditUrls() {
    var form = FormApp.openById('Your form key goes here');
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Your responses Google Sheet name goes here - The tab name, not the file name');
    var data = sheet.getDataRange().getValues();
    var urlCol = Column number where URLs get entered goes here;
    var responses = form.getResponses();
    var timestamps = [],
        urls = [],
        resultUrls = [];
    for (var i = 0; i < responses.length; i++) {
        timestamps.push(responses[i].getTimestamp().setMilliseconds(0));
        urls.push(responses[i].getEditResponseUrl());
    }
    for (var j = 1; j < data.length; j++) {
        resultUrls.push([data[j][0] ? urls[timestamps.indexOf(data[j][0].setMilliseconds(0))] : '']);
    }
    sheet.getRange(2, urlCol, resultUrls.length).setValues(resultUrls);
}

我目前正在使用此代码,它允许我更新正在生成编辑的记录 link 以编辑相应的记录。但挑战在于它也改变了时间戳。

问题是

我们如何修改此代码,以便我可以获得 google sheet 中特定记录的创建和最后修改日期和时间?

非常感谢任何帮助。非常感谢。

您可以创建一个 onFormSubmit 触发器,以便在添加新记录时保存行的创建日期。通过使用这种方法,我们可以轻松存储 Created DateModified Date (时间戳),您可以将其用于其他操作。

示例:

这里我更新了测试数据1的邮箱:

之前:

之后:

代码:

function assignEditUrls() {
    var form = FormApp.openById('Enter form id here');
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses 1');
    var data = sheet.getDataRange().getValues();
    var urlCol = 9;
    var responses = form.getResponses();
    var urls = [];
    for (var i = 0; i < responses.length; i++) {
      urls.push([responses[i].getEditResponseUrl()]);
    }
    sheet.getRange(2, urlCol, urls.length).setValues(urls);
}


function triggerTest(e){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses 1');
  var createdDateCol = 8;
  var row = e.range.getRow();
  sheet.getRange(1, createdDateCol, 1, 1).setValue("Created Date"); // Add created date header
  var cdRange = sheet.getRange(row, createdDateCol, 1, 1);
  if(cdRange.getValue() == ''){ // this indicates that the record is new
     cdRange.setValue(e.namedValues['Timestamp'])
  }
}

参考: