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

如何将Gravity Form最新响应同步至Google Sheets另一表格首行?

问题排查与修正方案

核心问题分析

  1. 初始脚本报错原因:onChange触发器的e.range仅在INSERT_ROW、EDIT等部分变更类型下存在,当变更类型为OTHER时,e.range是undefined,直接调用e.range.getSheet()会触发"Cannot get properties of undefined"错误。
  2. 修改后脚本无效果原因:
    • 未定义变量sh,调用sh.getRange()时会静默失败
    • getLastColumn()未指定所属工作表,属于无效调用
    • 错误依赖OTHER类型触发,Gravity Form提交表单时的核心新增行操作对应的变更类型是INSERT_ROW,而非OTHER

修正后的脚本

function syncLastResponse(e) {
  // 仅处理新增行的变更,且目标工作表为"Responses"
  if (e.changeType !== "INSERT_ROW") return;
  
  const sourceSheet = e.range.getSheet();
  if (sourceSheet.getName() !== "Responses") return;

  // 获取最新提交的行数据(新增行即为最后一行)
  const lastRow = sourceSheet.getLastRow();
  const sourceRange = sourceSheet.getRange(lastRow, 1, 1, sourceSheet.getLastColumn());
  
  // 写入到"Last Response"表的第一行
  const targetSheet = e.source.getSheetByName("Last Response");
  const targetRange = targetSheet.getRange(1, 1, 1, sourceSheet.getLastColumn());
  
  sourceRange.copyTo(targetRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES_AND_FORMATTING);
}

关键调整说明

  • 仅响应INSERT_ROW类型的变更,这是Gravity Form提交表单时新增响应行的核心触发事件
  • 直接通过sourceSheet.getLastRow()获取最新提交的行,避免依赖e.range.rowStart,逻辑更稳妥
  • 明确指定getLastColumn()的所属工作表,确保获取正确的列数
  • 显式指定复制类型(PASTE_VALUES_AND_FORMATTING),避免不必要的格式或公式冲突

触发器配置注意事项

  • 删除之前的旧触发器,重新创建可安装的onChange触发器,关联上述syncLastResponse函数
  • 确保触发器的事件类型选择"更改"(即onChange),不要选"编辑"(onEdit)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:55:11