如何在Google App Script中获取Card组件输入框的值?
解决Google Apps Script卡片TextInput字段值获取为null的问题
问题场景
创建卡片时已为TextInput设置setFieldName,但在处理函数中通过e.text_input_form_input_key获取值始终返回null:
卡片构建代码:
function createSelectionCard(e) { var builder = CardService.newCardBuilder(); builder.addSection(CardService.newCardSection() .addWidget(CardService.newTextInput() .setFieldName("text_input_form_input_key") .setTitle("Enter Value") .setValue('Test')) // 省略其他代码 return builder.build(); }
处理函数代码:
function Embed(e) { // ...其他逻辑 presentation.getSelection().getCurrentPage().insertImage(dataBlob) .setDescription(e.text_input_form_input_key) // 此处返回null }
问题原因
- 提交方式错误:若卡片提交按钮使用普通
Action而非FormAction,表单字段不会被打包到事件对象中。 - 取值路径错误:即使提交方式正确,表单字段值也并非直接挂载在
e对象下,而是存储在e.formInputs中,且每个字段值以数组形式存在(适配多值控件场景)。
修复方案
1. 修改卡片构建代码,改用FormAction提交
给卡片添加提交按钮时,关联FormAction而非普通Action:
function createSelectionCard(e) { var builder = CardService.newCardBuilder(); builder.addSection(CardService.newCardSection() .addWidget(CardService.newTextInput() .setFieldName("text_input_form_input_key") .setTitle("Enter Value") .setValue('Test')) // 添加提交按钮并关联FormAction .addWidget(CardService.newTextButton() .setText("提交") .setOnClickAction(CardService.newFormAction() .setFunctionName("Embed"))) ); return builder.build(); }
2. 修改处理函数,从formInputs中正确取值
在Embed函数中,通过e.formInputs获取字段值,取数组第一个元素即可:
function Embed(e) { // 正确获取文本输入框的值 var inputValue = e.formInputs.text_input_form_input_key[0]; // ...其他逻辑 presentation.getSelection().getCurrentPage().insertImage(dataBlob) .setDescription(inputValue); }
关键说明
setFieldName定义的键,仅在FormAction触发的事件中会映射到e.formInputs对象下。普通Action触发的事件不会携带表单数据,这是导致值为null的核心原因。
内容的提问来源于stack exchange,提问作者Vayun
相关产品推荐
相关产品推荐

