Google Apps Script:识别触发同一函数的表单响应来源表格
如何判断触发函数的表单/表格来源
方法1:绑定事件时传递自定义标识
在给每个表单绑定触发事件的环节,直接传入表格/表单的唯一标识(比如表格ID、名称)作为参数:
- 以Google Apps Script场景为例:
- 打开脚本编辑器,找到事件绑定逻辑
- 为不同表单的提交事件绑定函数时,通过
setProperty存入标识:
// 绑定表单A的提交事件,关联表格A的ID ScriptApp.newTrigger('yourTargetFunction') .forForm(FormApp.openById('表单A的ID')) .onFormSubmit() .setProperty('sourceTableId', '表格A的ID') .create(); // 绑定表单B的提交事件,关联表格B的ID ScriptApp.newTrigger('yourTargetFunction') .forForm(FormApp.openById('表单B的ID')) .onFormSubmit() .setProperty('sourceTableId', '表格B的ID') .create();- 在目标函数中通过触发对象读取标识:
function yourTargetFunction(e) { const sourceTableId = e.trigger.getProperties().sourceTableId; console.log('触发事件的表格ID:', sourceTableId); // 后续根据标识执行对应逻辑 }
方法2:通过响应反向关联表格
利用表单提交的响应对象,反向找到绑定的表格:
function yourTargetFunction(e) { // 从响应链接中提取表单标识 const formKey = e.response.getEditResponseUrl().split('formkey=')[1]; // 遍历当前文档的所有工作表,匹配绑定的表单 const targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets().find(sheet => { const linkedFormUrl = sheet.getFormUrl(); return linkedFormUrl && linkedFormUrl.includes(formKey); }); if (targetSheet) { console.log('触发事件的表格名称:', targetSheet.getName()); } }
方法3:给表单添加隐性标识字段
在每个表单中添加一个隐藏的短答案字段,字段值设为对应表格的名称/ID,提交时该值会被同步到表格:
- 操作步骤:在表单编辑器中添加短答案问题,设置为「仅管理员可见」,填入对应表格的标识
- 函数中直接读取该字段值:
function yourTargetFunction(e) { // 假设隐藏字段是表单的第5个问题,对应数组索引4(数组从0开始) const sourceTable = e.values[4]; console.log('触发事件的表格:', sourceTable); }
内容的提问来源于stack exchange,提问作者Cyril ACHARD
相关产品推荐
相关产品推荐

