如何实现两个Google表单关联同一Google表格并自动填充第二个表单?
实现Google表单归还钥匙时自动填充已填信息的方案
这个需求完全可行,核心是借助Google Apps Script来关联两张表单和共享表格的数据,下面提供两种落地方法:
方法1:用户输入唯一标识自动匹配填充
适合不想提前生成专属二维码的场景,用户扫描通用归还二维码后,输入自己的联系电话,脚本自动从共享表格中提取对应信息填充表单:
调整归还表单结构
- 添加「联系电话」输入框(作为匹配标识)
- 添加「姓名」「公司」「领用事由」字段,将这些字段设置为仅显示不可编辑(编辑字段时,右键选择「数据验证」,设置为固定值或禁用编辑权限)
- 保留「确认已归还钥匙」复选框作为唯一需要用户操作的项
编写Apps Script脚本
打开归还表单,点击右上角「扩展程序」→「Apps Script」,替换以下脚本中的占位内容后保存:function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('钥匙管理') .addItem('设置自动填充触发器', 'setupTrigger') .addToUi(); } function setupTrigger() { const form = FormApp.openById('你的归还表单ID'); // 替换为归还表单的ID ScriptApp.newTrigger('fillUserInfo') .forForm(form) .onFormSubmit() .create(); } function fillUserInfo(e) { // 获取用户输入的电话 const phone = e.response.getItemResponses().find(item => item.getItem().getTitle() === '联系电话').getResponse(); if (!phone) return; // 从共享表格读取领钥匙记录 const sheet = SpreadsheetApp.openById('共享表格ID').getSheetByName('领钥匙记录工作表名'); // 替换为共享表格ID和对应工作表名 const allData = sheet.getDataRange().getValues(); // 匹配对应电话的记录(假设电话在领钥匙表格的第3列,索引从0开始) const userRecord = allData.find(row => row[2] === phone); if (!userRecord) return; // 填充归还表单的对应字段 const form = FormApp.openById('你的归还表单ID'); const formItems = form.getItems(); formItems.forEach(item => { switch(item.getTitle()) { case '姓名': item.asTextItem().setResponse(userRecord[0]); // 假设姓名在领钥匙表格第1列 break; case '公司': item.asTextItem().setResponse(userRecord[1]); // 假设公司在领钥匙表格第2列 break; case '领用事由': item.asTextItem().setResponse(userRecord[3]); // 假设事由在领钥匙表格第4列 break; } }); }激活触发器
点击脚本界面的「钥匙管理」菜单,选择「设置自动填充触发器」,授权后即可生效。
方法2:生成专属预填充归还二维码
适合提前给用户生成专属归还凭证的场景,用户提交领钥匙表单后,脚本自动生成带预填充参数的归还链接,可直接转为二维码:
编写自动生成预填充链接的脚本
打开领钥匙表单的关联表格,进入「Apps Script」,替换占位内容后保存:function generateReturnLink(e) { // 获取领钥匙表单的提交数据 const responses = e.response.getItemResponses(); const name = responses.find(item => item.getItem().getTitle() === '姓名').getResponse(); const company = responses.find(item => item.getItem().getTitle() === '公司').getResponse(); const phone = responses.find(item => item.getItem().getTitle() === '电话').getResponse(); const reason = responses.find(item => item.getItem().getTitle() === '领用事由').getResponse(); // 生成预填充归还链接 const returnFormId = '你的归还表单ID'; const form = FormApp.openById(returnFormId); // 获取归还表单各字段的ID const nameItemId = form.getItemByTitle('姓名').getId(); const companyItemId = form.getItemByTitle('公司').getId(); const phoneItemId = form.getItemByTitle('电话').getId(); const reasonItemId = form.getItemByTitle('领用事由').getId(); const prefillUrl = `https://docs.google.com/forms/d/e/${returnFormId}/viewform?entry.${nameItemId}=${encodeURIComponent(name)}&entry.${companyItemId}=${encodeURIComponent(company)}&entry.${phoneItemId}=${encodeURIComponent(phone)}&entry.${reasonItemId}=${encodeURIComponent(reason)}`; // 将预填充链接写入共享表格的对应行(比如第5列) const sheet = SpreadsheetApp.getActiveSheet(); const lastRow = sheet.getLastRow(); sheet.getRange(lastRow, 5).setValue(prefillUrl); }设置表单提交触发器
在脚本界面创建「表单提交」触发器,绑定generateReturnLink函数,这样用户提交领钥匙表单后,表格会自动生成对应的归还预填充链接,将链接转为二维码即可给用户作为归还凭证。
内容的提问来源于stack exchange,提问作者Dean Gathercole
相关产品推荐
相关产品推荐

