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

如何设置CheckboxGridItem:每列限选一个且问题必填(非每行必填)

解决Google Apps Script中CheckboxGrid必填列而非行的问题

默认的setRequired(true)会强制CheckboxGrid的每行都必须选择答案,这和requireLimitOneResponsePerColumn()规则冲突(行数多于列数时用户根本做不到)。要实现「每列必须选一个、无需每行都选」的需求,得用自定义验证规则替代默认的必填设置,具体实现如下:

代码示例

function createColumnRequiredCheckboxGrid() {
  // 获取当前活动表单,也可以用FormApp.create("表单名称")新建表单
  const form = FormApp.getActiveForm();

  // 定义你的行和列内容(行数多于列数)
  const gridRows = ["选项1", "选项2", "选项3", "选项4", "选项5"];
  const gridColumns = ["类别A", "类别B"];

  // 创建CheckboxGrid问题
  const checkboxGrid = form.addCheckboxGridItem()
    .setTitle("请为每个类别选择对应的选项")
    .setRows(gridRows)
    .setColumns(gridColumns);

  // 先添加「每列最多选一个」的规则
  checkboxGrid.requireLimitOneResponsePerColumn();

  // 创建自定义验证:确保每列至少有一个选项被选中
  const columnValidation = FormApp.createValidation()
    .setHelpText("请确保每个类别都选择了对应的选项")
    .requireCustomFunction(function(response) {
      // 将响应从「行优先」转成「列优先」的结构
      const columnResponses = gridColumns.map((_, colIdx) => 
        gridRows.map((_, rowIdx) => response[rowIdx][colIdx])
      );
      // 检查每一列是否至少有一个选中项(即数组中包含true)
      return columnResponses.every(column => column.includes(true));
    });

  // 为CheckboxGrid应用自定义验证
  checkboxGrid.setValidation(columnValidation);
}

关键说明

  1. 保留列限选规则:requireLimitOneResponsePerColumn()依然生效,确保同一列不会被多选。
  2. 自定义验证逻辑:通过转置响应数组,把原本按行存储的选中状态改成按列分组,再检查每列是否有至少一个勾选,既实现了「整个问题必填(每列都要有答案)」,又不强制用户每行都选。
  3. 错误提示自定义:setHelpText()里的内容会在用户未满足要求时弹出,引导用户修正。

这样设置后,用户只有在每列都选了至少一个选项时才能提交表单,同时不会出现「每行必须选」的强制要求,完美适配行数多于列数的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:33:11