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

Google App Script:如何在Card Action中传递下拉框参数?

解决Card Service中获取下拉框值并提交的问题

嘿,我之前开发Google Workspace插件的Card Service时也碰到过一模一样的问题,给你分享下具体的实现思路和代码,应该能直接帮你搞定!

核心思路

Card Service里的表单控件(比如下拉框)的值,会在触发按钮的Action Handler时,通过事件对象e的formInput属性传递给处理函数。关键是要给每个下拉框设置唯一的fieldName,这样就能精准获取对应的值。

步骤1:构建下拉框时设置唯一标识

首先在创建两个下拉框的时候,一定要用setFieldName()给它们设置唯一的key,这个key就是后面取值的依据:

// 构建产品分类下拉框
const buildProductCategoryDropdown = () => {
  return CardService.newSelectionInput()
    .setType(CardService.SelectionInputType.DROPDOWN)
    .setFieldName('product_category') // 唯一标识,后面用来取值
    .setTitle('产品分类')
    .addItem('电子产品', 'electronics', false)
    .addItem('家居用品', 'home', false)
    .addItem('服饰', 'clothing', false);
};

// 构建子分类下拉框
const buildSubCategoryDropdown = () => {
  return CardService.newSelectionInput()
    .setType(CardService.SelectionInputType.DROPDOWN)
    .setFieldName('sub_category') // 另一个唯一标识
    .setTitle('子分类')
    .addItem('手机', 'phone', false)
    .addItem('笔记本电脑', 'laptop', false)
    .addItem('智能家电', 'smart_home', false);
};

步骤2:绑定按钮的Action Handler

创建提交按钮时,把它的点击动作绑定到一个处理函数,比如handleSubmit:

const buildSubmitButton = () => {
  return CardService.newTextButton()
    .setText('提交到表格')
    .setOnClickAction(CardService.newAction()
      .setFunctionName('handleSubmit') // 绑定处理函数
      .setLoadIndicator(CardService.LoadIndicator.SPINNER)); // 点击后显示加载动画
};

步骤3:在处理函数中获取值并提交

在handleSubmit函数里,通过e.formInput就能拿到两个下拉框的值,然后直接传入你已经实现的电子表格提交逻辑即可:

function handleSubmit(e) {
  // 从事件对象中获取两个下拉框的值
  const selectedProductCategory = e.formInput.product_category;
  const selectedSubCategory = e.formInput.sub_category;

  // 可选:先做简单的非空验证
  if (!selectedProductCategory || !selectedSubCategory) {
    // 返回错误提示给用户
    return CardService.newActionResponseBuilder()
      .setNotification(CardService.newNotification()
        .setText('请选择完整的分类信息哦!')
        .setType(CardService.NotificationType.ERROR))
      .build();
  }

  // 这里调用你已经实现的表格提交逻辑,把两个分类值传进去
  const targetSpreadsheet = SpreadsheetApp.openById('你的电子表格ID');
  const targetSheet = targetSpreadsheet.getSheetByName('数据工作表');
  
  // 示例:将分类值和当前时间一起写入表格
  targetSheet.appendRow([new Date(), selectedProductCategory, selectedSubCategory]);

  // 返回成功提示给用户
  return CardService.newActionResponseBuilder()
    .setNotification(CardService.newNotification()
      .setText('数据提交成功啦!')
      .setType(CardService.NotificationType.SUCCESS))
    .build();
}

几个需要注意的点

  • 下拉框的setFieldName必须唯一,不能重复,否则会覆盖值
  • 事件对象e只有在Action Handler函数中才能获取到,普通函数无法直接访问
  • 如果需要根据产品分类动态更新子分类的选项,还可以用setOnChangeAction绑定下拉框的变更事件,不过这是额外功能,你当前的需求用上面的代码就足够了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:20:53