Apps Script:如何将HTML表单提交的指定字段存储为全局变量复用
Google Apps Script 字段复用实现方案
以下是3种常用的可行方案,可根据你的实际使用场景选择:
方案1:脚本级全局变量(同一次执行上下文有效)
适合后续调用的其他函数和AddUserInputToSheet处于同一次请求触发的执行链的场景,比如表单提交后立刻触发多个关联处理函数的情况:
- 在所有函数外部声明全局变量
- 赋值后同一次执行的所有函数都可以直接调用
代码示例:
// 脚本顶部全局声明 let globalLastName = '' let globalEmail = '' let globalPhone = '' function AddUserInputToSheet(gender, firstName, lastName, age, email, phone) { var url = 'SHEET_URL'; var ss = SpreadsheetApp.openByUrl(url); var webAppSheet = ss.getSheetByName("SHEET_NAME"); webAppSheet.appendRow([gender, firstName, lastName, age, email, phone]); // 存入全局变量 globalLastName = lastName globalEmail = email globalPhone = phone // 同执行链内调用其他函数可直接读取变量 otherFunction() } function otherFunction() { // 直接读取全局变量使用 console.log(globalLastName, globalEmail, globalPhone) }
注意:该方案的全局变量仅在同一次执行生效,脚本执行结束后变量会被清空,下次触发不会保留上次的值
方案2:PropertiesService持久化存储(跨执行上下文有效)
适合后续调用的函数和表单提交是不同时间触发的场景,比如提交表单几小时后,其他定时触发器运行的函数需要用到最新提交的三个字段,可使用Google官方提供的属性存储服务持久化保存数据:
代码示例:
function AddUserInputToSheet(gender, firstName, lastName, age, email, phone) { var url = 'SHEET_URL'; var ss = SpreadsheetApp.openByUrl(url); var webAppSheet = ss.getSheetByName("SHEET_NAME"); webAppSheet.appendRow([gender, firstName, lastName, age, email, phone]); // 存入脚本属性,所有执行上下文均可读取 const scriptProps = PropertiesService.getScriptProperties() scriptProps.setProperties({ 'lastName': lastName, 'email': email, 'phone': phone }) } // 任意其他函数均可读取 function otherFunction() { const scriptProps = PropertiesService.getScriptProperties() const lastName = scriptProps.getProperty('lastName') const email = scriptProps.getProperty('email') const phone = scriptProps.getProperty('phone') // 后续逻辑直接使用上述变量即可 }
注意:如果有多个用户同时提交表单,会出现后提交的值覆盖前一次存储值的情况,适合单用户使用、或者仅需要存储最新提交值的场景
方案3:直接读取Sheet最后一行数据(数据一致性最高)
如果你的需求是需要用到最后一次成功提交到Sheet的三个字段值,最稳妥的方式是直接从Sheet读取,不会出现存储值和Sheet实际数据不一致的问题,也不会有并发冲突:
代码示例:
// 封装为通用工具函数,任意位置均可调用 function getLastSubmitInfo() { var url = 'SHEET_URL'; var ss = SpreadsheetApp.openByUrl(url); var webAppSheet = ss.getSheetByName("SHEET_NAME"); // 获取最后一行对应字段值,假设lastName为第3列、email为第5列、phone为第6列,和你appendRow的顺序对应 const lastRow = webAppSheet.getLastRow() const rowValues = webAppSheet.getRange(lastRow, 1, 1, 6).getValues()[0] return { lastName: rowValues[2], email: rowValues[4], phone: rowValues[5] } } // 其他函数调用方式 function otherFunction() { const {lastName, email, phone} = getLastSubmitInfo() // 后续逻辑直接使用即可 }
内容的提问来源于stack exchange,提问作者Bob Hardball
相关产品推荐
相关产品推荐

