从谷歌表单编辑响应后获取创建和修改日期

时间:2021-06-10 16:12:22

标签: javascript google-apps-script 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);
}

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

问题是

我们如何修改此代码,以便我可以为 Google 表格中的特定记录创建和上次修改日期和时间?

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

1 个答案:

答案 0 :(得分:0)

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

示例:

这里我更新了测试数据 1 的电子邮件:

之前: enter image description here

之后: enter image description here

代码:

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'])
  }
}

参考: