Skip to main content
Version: latest

自动圈选与填充

通过set行为可以实现自动圈选和自动填充逻辑,即根据前面题目的回答情况,自动为后续题目选择选项或填充内容。

注意事项
  • set操作支持单选、多选、下拉题的选项自动圈选
  • set操作支持单行文本题、多行文本题的内容自动填充
  • set操作支持普通填空和选项填空的内容自动填充
  • set操作支持矩阵填空题单元格的内容自动填充
  • 普通set和条件命中时的set bind会锁定目标;set default不会锁定目标
  • 可以结合hide将中间变量题目隐藏

基础自动圈选

根据前一题的选择,自动圈选下一题的相应选项

例子

Q1. 您的收入情况是?【单选】Q1

  • A. <1000 Q1A1
  • B. 1000-5000 Q1A2
  • C. 5000-10000 Q1A3
  • D. >10000 Q1A4

Q2. 您的人群分类?【单选】Q2

  • A. 低收入 Q2A1
  • B. 中等收入 Q2A2
  • C. 高收入 Q2A3

自定义逻辑

if Q1A1 then set Q2A1 # 收入<1000,自动圈选低收入
if Q1A2 or Q1A3 then set Q2A2 # 收入1000-10000,自动圈选中等收入
if Q1A4 then set Q2A3 # 收入>10000,自动圈选高收入

效果

当答题者在Q1中选择不同的收入选项时,Q2会自动圈选对应的人群分类选项。

set的三种模式

set支持普通、binddefault三种模式。binddefault写在整条set语句的末尾,对该语句中的全部目标生效。

# 普通set
set Q2A1
set Q3 = Q1

# bind模式
if Q1A1 then set Q2A1 bind
if Q1 > 0 then set Q3 = Q1 bind

# default模式
set Q2A1, Q2A2 default
if Q1 > 0 then set Q3 = Q1 default

普通set

普通set会持续控制并锁定目标:

  • 条件命中时写入计算结果
  • 条件未命中或没有有效结果时清空目标
  • 回答者不能手动修改目标

适合需要由DSL完全控制答案的场景。

set bind

set bind只在条件命中期间控制目标:

  • 条件命中时写入结果并锁定目标
  • 条件从命中变为未命中时,清空一次目标并解除锁定
  • 条件持续未命中时,不再修改目标,回答者可以手动填写
# 勾选Q1A1时自动设置并锁定Q2A1;
# 取消勾选后清空Q2A1并允许回答者手动选择
if Q1A1 then set Q2A1 bind

set default

set default只为空答案提供默认值,不会锁定目标,也不会覆盖已有答案:

  • 问卷初始化时执行无条件或已经命中的默认规则
  • 条件由未命中变为命中时,为仍为空的目标写入默认值
  • 条件持续命中时不会反复覆盖,回答者可以修改或清空答案
  • 条件先解除、之后再次命中时,如果目标仍为空,可以再次写入默认值

undefinednull、空字符串和空数组会被视为空答案;数字或文本0是有效答案。

# Q2为空时默认选择A选项,回答者仍可修改
set Q2A1 default

# Q1A1每次重新命中时,如果Q3为空则填入默认文案
if Q1A1 then set Q3 = "默认说明" default

结合自定义参数的自动圈选

通过PARAMS函数获取自定义参数,实现基于外部参数的自动圈选

例子

Q1. 您的身份是?【单选】Q1

  • A. 高级管理者 Q1A1
  • B. 基层管理者 Q1A2
  • C. 普通员工 Q1A3

Q2. 您好XXX,您是否愿意接受我们的调研?【单选】Q2

  • A. 愿意 Q2A1
  • B. 不愿意 Q2A2

自定义逻辑

# 根据自定义参数user_name为张三,自动圈选高级管理者
if PARAMS("user_name") == "张三" then set Q1A1

# 将题目中的XXX替换为用户姓名
replace "XXX" in Q2 title with PARAMS("user_name")

使用场景

组合自定义参数和自动圈选

使用set作为中间变量

set可以作为中间变量来存储逻辑运算的结果,简化复杂的逻辑表达

例子

Q1. 您购买过以下哪些国货品牌?【多选】Q1

  • A. 华为 Q1A1
  • B. 小米 Q1A2
  • C. OPPO Q1A3

Q2. 在购买的国货品牌中,您会向亲友推荐的有?【多选】Q2

  • A. 华为 Q2A1
  • B. 小米 Q2A2
  • C. OPPO Q2A3

Q3. 您愿意推荐给亲友的品牌(此题不显示给用户)【多选】Q3

  • A. 华为 Q3A1
  • B. 小米 Q3A2
  • C. OPPO Q3A3

Q4. 您愿意向亲友推荐【嵌入被访人同时在Q1和Q2中进行了选择的品牌名字】的原因是?【文本题】Q4

  • A. 品牌介绍1 Q4S1
  • B. 品牌介绍2 Q4S2
  • C. 品牌介绍3 Q4S3

自定义逻辑

# 显示Q2选项,仅显示Q1中已选择的选项
if Q1A1 then show Q2A1
if Q1A2 then show Q2A2
if Q1A3 then show Q2A3

# 使用set作为中间变量,保存同时在Q1和Q2中选择的选项
if Q1A1 and Q2A1 then set Q3A1
if Q1A2 and Q2A2 then set Q3A2
if Q1A3 and Q2A3 then set Q3A3

# 隐藏Q3,不显示给用户
hide Q3

# 将Q3的结果(作为中间变量)用于题目内容替换
replace "【嵌入被访人同时在Q1和Q2中进行了选择的品牌名字】" in Q4 title with Q3

# 根据Q3的结果控制Q4子问题的显示
if Q3A1 then show Q4S1 # 如果华为被同时选择,显示华为相关问题
if Q3A2 then show Q4S2 # 如果小米被同时选择,显示小米相关问题
if Q3A3 then show Q4S3 # 如果OPPO被同时选择,显示OPPO相关问题

文本题自动填充

set操作可以自动填充单行文本题和多行文本题的内容。普通set会禁用目标;set bind只在条件命中时禁用目标;set default不会禁用目标。

set赋值表达式

使用set 目标 = 表达式可以写入数字或文本。表达式支持:

  • 数字和字符串,例如100"固定文本"
  • 题目、填空和矩阵填空答案,例如Q1Q1B1Q1S1A1
  • 自定义参数和语言等函数,例如PARAMS("user_name")LANG()
  • 随机整数函数RANDBETWEEN(最小值, 最大值)
  • +-*/和括号
  • 题目 index N,用于读取第N个答案文本片段
# 固定文本
set Q2 = "固定文本"

# 复制其他题目的数字或文本答案
set Q2 = Q1

# 拼接题目答案、自定义参数和固定文本
set Q2 = "姓名:" + PARAMS("user_name") + ",语言:" + LANG()

# 算术与文本组合
set Q3 = "合计:" + (Q1 * Q2) + "元"

# 生成1到10之间的随机整数
set Q3 = RANDBETWEEN(1, 10)

# 读取Q1的第2个答案文本片段
set Q2 = Q1 index 2

+的数字与文本规则

表达式中的每个值都会在运行时检测:

  • +两侧都可以转换为数字时,执行数字加法
  • 一侧可转换为数字、另一侧为空文本时,不产生结果(视为未完成的算术运算)
  • 其余任意一侧不能转换为数字时,执行文本拼接
  • -*/只支持可以转换为数字的值
  • null、空字符串和纯空白文本不会被当作数字0
# Q1="10"、Q2="20"时,结果为数字30
set Q3 = Q1 + Q2

# Q1="商品"、Q2="20"时,结果为文本"商品20"
set Q3 = Q1 + Q2

# Q1="10"、Q2未填时,不设置Q3
set Q3 = Q1 + Q2

# 非空文本与空答案仍可拼接
set Q3 = "前缀-" + Q2

# PARAMS返回"10"时参与加法;返回普通文本时参与拼接
set Q3 = PARAMS("count") + 2
数字字符串

带引号的数字字符串同样可以转换为数字,因此"10" + "20"的结果是30,而不是文本"1020"。如果需要明确拼接,请保证至少一侧包含不能转换为数字的文本。

例子

Q1. 请输入您的年龄【单行文本题】Q1

Q2. 请输入您的出生年份【单行文本题】Q2

Q3. 您的出生年份计算结果【单行文本题】Q3

自定义逻辑

# 根据年龄计算出生年份(假设当前年份为2026)
set Q3 = 2026 - Q1

# 也可以使用条件设置
if Q1 > 0 then set Q3 = 2026 - Q1

效果

当答题者在Q1中输入年龄后,Q3会自动计算并显示出生年份,且Q3为禁用状态无法手动修改。

使用其他题目的答案填充

例子

Q1. 请输入您的姓名【单行文本题】Q1

Q2. 确认姓名(系统自动填充)【单行文本题】Q2

自定义逻辑

# 将Q1的答案复制到Q2
set Q2 = Q1

矩阵填空题自动填充

set操作支持矩阵填空题,可以根据其他题目的答案自动设置矩阵填空题单元格的值。

例子

Q1. 请输入基础数据【矩阵填空题】Q1

数量 Q1A1单价 Q1A2总价 Q1A3
商品A Q1S1Q1S1A1Q1S1A2Q1S1A3
商品B Q1S2Q1S2A1Q1S2A2Q1S2A3

自定义逻辑

# 自动计算商品A的总价 = 数量 × 单价
set Q1S1A3 = Q1S1A1 * Q1S1A2

# 自动计算商品B的总价 = 数量 × 单价
set Q1S2A3 = Q1S2A1 * Q1S2A2

效果

当答题者在矩阵填空题中输入数量和单价后,总价列会自动计算并填充,且该单元格为禁用状态无法手动修改。

条件自动填充

自定义逻辑

# 当数量大于10时,给予折扣(总价 = 数量 × 单价 × 0.9)
if Q1S1A1 > 10 then set Q1S1A3 = Q1S1A1 * Q1S1A2 * 0.9
if Q1S1A1 <= 10 then set Q1S1A3 = Q1S1A1 * Q1S1A2

跨题目设置

例子

Q1. 请输入基准值【单行文本题】Q1

Q2. 计算结果【矩阵填空题】Q2

自定义逻辑

# 将Q1的值设置到矩阵填空题的指定单元格
set Q2S1A1 = Q1

# 使用Q1进行计算并设置
set Q2S1A2 = Q1 * 2
set Q2S1A3 = Q1 + 100