You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Google Apps Script获取Google Form原始提交时间戳?

解决Google表单编辑后时间戳更新导致排序混乱的问题

需求说明

我们用Google Form收集项目需求,数据同步到Google Sheets,并且已经通过脚本生成了表单响应的编辑URL(支持提交后其他人后续编辑)。但现在遇到一个问题:表单被编辑后,Sheets里的时间戳会被更新,导致数月前提交的内容编辑后跑到列表末尾,没办法按原始提交顺序展示数据。需要修改现有脚本,同时实现两个目标:

  • 保留生成正确编辑URL的功能
  • 获取并存储原始提交时间戳,用来做正确排序

修改方案

核心思路是:新增一个专门存储原始提交时间的列,在第一次生成编辑URL时,从Google Form的响应数据里提取原始提交时间(这个时间不会随编辑改变),写入该列。后续排序就用这个列的值,而非Sheets里被更新的默认时间戳列。

步骤&修改后的代码

  1. 先在你的Google Sheets表单响应表格里,新增一列,表头命名为原始提交时间(可以自定义名称,但要和脚本里的变量对应)
  2. 替换原脚本为以下代码:
/*
 * Global Variables
 */

// Form URL
var formURL = 'https://docs.google.com/forms/d/ID_of_our_Google_Form/edit';
// Sheet name used as destination of the form responses
var sheetName = 'Form responses 3';
/*
 * Name of the column to be used to hold the response edit URLs 
 * It should match exactly the header of the related column, 
 * otherwise it will do nothing.
 */
var columnName = 'Edit Url' ;
// 新增:存储原始提交时间的列名,要和Sheets里的表头完全一致
var columnOriginalTimestamp = '原始提交时间';
// Responses starting row
var startRow = 2;

function getEditResponseUrls(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
  var columnIndex = headers[0].indexOf(columnName);
  // 新增:获取原始提交时间列的索引
  var originalTimestampColIndex = headers[0].indexOf(columnOriginalTimestamp);
  
  // 如果找不到编辑URL列或原始时间列,直接终止脚本
  if(columnIndex === -1 || originalTimestampColIndex === -1) return;
  
  var data = sheet.getDataRange().getValues();
  var form = FormApp.openByUrl(formURL);
  for(var i = startRow-1; i < data.length; i++) {
    // 只处理有时间戳但还没生成编辑URL的行
    if(data[i][0] != '' && data[i][columnIndex] == '') {
      var timestamp = data[i][0];
      var formSubmitted = form.getResponses(timestamp);
      if(formSubmitted.length < 1) continue;
      
      var response = formSubmitted[0];
      var editResponseUrl = response.getEditResponseUrl();
      // 提取Form里的原始提交时间(不会随编辑改变)
      var originalSubmitTime = response.getTimestamp();
      
      // 同时写入编辑URL和原始提交时间
      sheet.getRange(i+1, columnIndex+1).setValue(editResponseUrl);
      sheet.getRange(i+1, originalTimestampColIndex+1).setValue(originalSubmitTime);
    }
  }
}

关键说明

  • 脚本只在第一次生成编辑URL时写入原始提交时间,后续编辑不会覆盖这个值,确保原始时间永远准确
  • response.getTimestamp() 是从Google Form的响应记录里直接获取的原始提交时间,和Sheets里被编辑更新的时间戳完全独立
  • 之后你只需要把Sheets的排序依据改成原始提交时间列,就能始终按最初的提交顺序展示内容,不受编辑操作影响

内容的提问来源于stack exchange,提问作者Pat Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:22:47