XLSForm 可多次重复一个问题集合。 以下是重复使用方法的部分示例:
- 在一个调查中捕获同一问题的多个答案。
- 捕获单独的、较小的记录集合,例如家庭中各个成员的姓名、年龄和性别。
- 在一个调查中捕获多个地图问题。

当发布包含重复的调查时,每个重复将在要素图层中被创建为相关表,如果重复包含地理点、geotrace 或 geoshape 问题,则将被创建为相关图层。
使用重复
要重复一个问题集合以捕获多个响应,请在电子表格的调查选项卡中完成以下步骤:
- 在您希望开始重复的行的 type 列中,输入 begin repeat。
- 在 name 列中,提供重复的名称。
- 在此条目下的行中,输入要包括在重复中的问题。
- 输入问题之后,立即在类型列中输入 end repeat。
调查中将创建一个问题集合,您可以将该问题集合重复添加到调查结果中。 默认情况下,对于可重复问题的次数没有限制。
可以在调查的任意地图上显示重复中第一个地理点问题中的点位置。 有关详细信息,请参阅地图上的点叠加。
外观
将 begin repeat 问题的 appearance 列设置为 minimal 后,该问题集合将不会在启动时显示。 用户必须单击添加按钮才能查看重复中的问题。 如果无需在调查中完成重复问题,则此功能非常有用。 可以在开始重复问题中定义此外观。

如果将重复设置为 minimal,并且重复计数为零,则重复控件及其标注将不可见。
将 begin repeat 问题的外观设置为 compact 后,重复将在启动时以折叠状态显示,并可由用户进行展开。 对于用户难以阅读和导航的较大调查,该功能非常有用。 可以在开始重复问题中定义此外观。
与其他外观不同,将外观设置为 minimal compact 后,重复可以同时使用 minimal 和 compact。 将以折叠 (compact) 和隐藏 (minimal) 方式显示重复中的问题。
将 begin repeat 问题的外观设置为 tabular 后,重复中的问题以表格形式呈现。 有关详细信息,请参阅表格重复。
表格重复
注:
本部分介绍的功能仅在 Survey123 Studio 和 Survey123 Mobile 中可用。
在 Survey123 Connect、Survey123 外业应用程序和 Survey123 Web 应用程序中,tabular 外观及其关联的 XLSForm 参数会被忽略。
将 begin repeat 问题的外观设置为 tabular 后,重复中的问题以表格形式呈现。 在表格视图中,重复中的记录显示为行,重复中的问题显示为列。 表格视图允许您直接在其单元格中编辑数据,并对重复中的记录进行排序和导航。
表格视图如下图所示:

上图中的注释具体如下:
- 点击每行的菜单按钮以访问在表单视图中编辑、复制到新记录和删除选项。
- 只读图标表示问题(列)在表格视图中无法编辑。
- 点击列标题以升序排序表格视图,并且可以选择执行以下操作:
- 再次点击列标题以按降序排序。
- 第三次点击列标题以关闭排序(恢复为原始行顺序)。 或者,点击另一列标题以对该列进行排序。
- 点击单元格以编辑其值。 只有某些问题类型可以在表格视图中编辑。
- 点击单元格中的清除按钮以删除其值。
您也可以在表单视图中编辑单个记录。 表单视图在单独的、功能完整的调查表单中呈现单个重复记录。
tabular 外观可以与 minimal 和 compact 外观结合使用。
要在 Survey123 Studio 中开始使用表格重复,请完成以下步骤:
向表格视图添加问题
您可以通过在重复中问题的 body::esri:style 列中输入 showInTabularView=true 来将问题添加到表格视图中。 您可以在表格视图中编辑以下问题类型:
- text
- integer
- decimal
- date
- 时间
- dateTime
所有其他问题类型在表格视图中显示为只读列。
警告:
向表格视图添加问题时,请注意以下内容:
- 在 readonly 列中包含表达式(包括 yes)的重复中的问题,在表格视图中无法编辑。
- 在 body::esri:visible 列中包含表达式或具有 hidden 外观的重复中的问题,在表格视图中不显示。
- 在 relevant 列中包含表达式的重复中的问题,在表格视图中不显示。
- 在 required 列中包含表达式(包括 yes)或在 constraint 列中包含表达式的重复中的问题,会显示在表格视图中。 当不满足一个或多个必填或约束条件时,表格视图上方会显示常规警告,并且每个有错误的记录(行)旁边都会显示一个警告图标。 在这些问题得到解决之前,您无法提交调查。 您可以在表单视图中编辑记录,以查看单个问题的约束和必填警告消息。 当重复存在错误时,在表单视图中编辑选项可用,即使 body::esri:style 列中的 editInFormView 参数设置为 false 也是如此。
表格视图选项
您可以通过在 begin repeat 问题的 body::esri:style 列中指定参数来配置与表格视图中记录(行)相关的选项。 这些可选参数如下表所述。 您可以通过用空格分隔参数来添加多个参数。 以下为示例:
addRecordMode=form copyToNewRecord=false
当您将 begin repeat 问题的外观设置为 tabular,且未在 body::esri:style 列中为此问题指定任何参数时,默认情况下,在表单视图中编辑、复制到新记录和删除选项在表格视图中可用。
| 参数 | 描述 |
|---|---|
| addRecordMode | 指定表格视图中添加记录按钮和复制到新记录选项的模式。 默认值为 row。 当值为 row 时,新记录将追加到表格视图中。 当值为 form 时,新记录将在表单视图中打开。 值:row | form 示例: |
| editInFormView | 在表格视图中显示或隐藏在表单视图中编辑选项。 默认值为 true。 注:当重复存在错误时,即使 editInFormView 参数设置为 false,在表单视图中编辑选项也会启用。 值:true | false 示例: |
| copyToNewRecord | 在表格视图中显示或隐藏复制到新记录选项。 此选项允许用户复制重复中的记录。 默认值为 true。 addRecordMode 参数决定如何添加重复记录。 值:true | false 示例: |
| editInTabularView | 启用或禁用表格视图中的编辑。 默认值为 true。 当值为 false 时,表格视图中的所有单元格均为只读。 值:true | false 示例: |
使用表格重复时的限制
以下限制适用于表格重复:
- tabular 外观不支持嵌套重复。
- 复制到新记录选项不会将附件或嵌套重复复制到新记录。 这与从已发送文件夹或收件箱将调查记录复制到新记录时的行为一致。
- 在对表格视图进行排序时,建议不要在已应用排序的列中编辑值,因为每次按键时排序都会立即更新。
- 当表格重复位于具有相关表达式的组内时,当组变为相关时,其表格视图将为空。
- 在从右向左书写的语言中,表格视图中列的顺序不会反转,并且列标题并不总是右对齐。
指定重复记录的数量
注:
本部分将介绍仅在 Survey123 Connect 和 Survey123 外业应用程序中可用的功能。此功能在 Survey123 Studio 或 Survey123 Mobile 中不可用。
要指定重复中的重复记录次数,按照以下步骤设置重复计数:
- 在调查选项卡中您希望开始重复的行的 type 列中,输入 begin repeat。
- 在 repeat_count 列中,提供重复数的数值。
可以选择提供问题名称或返回数值的计算。
- 在 name 列中,提供重复的名称。
- 在此条目下的行中,输入要包括在重复中的问题。
- 在类型列的最后一行中,输入 end repeat。
当用户打开调查时,repeat_count 列中设置的重复数已经创建完成。 用户无法创建或删除重复。
在提交调查响应之前,用户必须导航到由 repeat_count 值定义的所有重复记录。 否则,系统将不会提交全部重复记录,因为在用户导航到记录之前,表达式和默认值无法应用于重复。 为确保提交所有重复,您可以将重复中的问题设置为必填。 提交时系统不会评估重复中应用了相关语句或根据条件必填语句的问题。
注:
具有变化重复计数的重复行为有所不同,具体取决于用户是创建调查响应还是编辑之前提交的调查响应,如下所示:
- 创建调查响应时,外业应用程序显示重复顶部的按钮用于删除超过新重复计数的所有包含数据的记录;将自动删除空白记录。 无论是否按下此按钮,提交调查响应都会发送除空记录外的所有记录。
- 编辑现有调查响应时,外业应用程序显示重复顶部的消息用于指示记录数与重复计数不匹配。 只有在 bind::esri:parameters 列中将 allowAdds 设置为 true 时,才能添加新的重复记录。 无法删除超过重复次数的记录,因为外业应用程序不支持删除现有的重复记录。 即使重复记录的数量与重复计数不匹配,也可以提交编辑后的调查响应。
聚合函数
注:
本部分将介绍仅在 Survey123 Connect 和 Survey123 外业应用程序中可用的功能。此功能在 Survey123 Studio 或 Survey123 Mobile 中不可用。
可以使用聚合函数以返回从跨重复的响应中派生出的值。 为此,重复中的问题会被重复之外的问题引用。 例如,以下公式将对跨重复的单个问题的响应进行计数:
count(${repeated_question})
可以使用以下函数来聚合响应:
- count
- sum
- min
- max
- join
这些函数仅适用于当前的调查响应。 它们不考虑要素图层中的其他记录。 您也可以在重复内包含使用 sum 和 count 的问题。 但是,虽然将为添加到重复中的每个新记录计算 sum 和 count 值,但重复中先前条目的计算将不会自动更新。 可以使用问题旁的刷新按钮来手动刷新这些计算。 仅支持在重复之外使用 min 和 max。
注:
在 Survey123 外业应用程序中使用时,可将 sum、count 和 join 函数置于重复的内部或外部。 如果要在 Survey123 web 应用程序中使用 sum、count 和 join,必须将其放置在重复的外部。 可以在重复内部的计算中引用来自重复外部的 sum、count 或 join 值。
可以使用 join 函数来串联返回字符串的问题。 您还可以使用 sum 函数来连接重复内的地理点问题作为重复外的 geotrace 或 geoshape 问题。
有关如何使用这些函数的信息,请参阅公式。
返回重复记录的索引
可以使用 position(..) 函数返回整数,以反映重复中的重复记录索引。 例如,重复记录中的第一个记录将返回 1,第二个记录将返回 2,依此类推。 在以下示例中,position(..) 函数用于重复中的隐藏整型问题:

警告:
当在重复之外或在重复内的组内使用时,position(..) 函数将始终在 Survey123 Mobile 和 Survey123 外业应用程序中返回 0 或在 Survey123 Web 应用程序中返回 1。
您也可以在表达式中使用 position(..) 函数。 在以下示例中,selected-at() 函数使用 position(..) 返回在 select_multiple 问题中选择的与当前重复记录位于相同位置的选项,并在重复中将该选项显示为备注。 selected-at() 函数从零开始对选项进行计数,因此从 position(..) 中减去 1 以确保索引匹配,如下所示:
selected-at(${issues}, position(..)-1)

可以将 position(..) 函数与 indexed-repeat() 结合使用以从特定重复记录中提取问题值。
使用索引重复中的值
注:
本部分将介绍仅在 Survey123 Connect 和 Survey123 外业应用程序中可用的功能。此功能在 Survey123 Studio 或 Survey123 Mobile 中不可用。
可以使用 indexed-repeat() 函数以返回重复记录中的特定问题中的值。 这需要按该顺序输入问题名称、重复名称和重复的索引号。 对于重复 floor 中的第三个记录,以下示例将返回问题 room_no 的答案:
indexed-repeat(${room_no}, ${floor}, 3)
对于重复内的重复,可以使用 indexed-repeat() 函数。 以这种方式使用时,它将仅接收可从当前可见的父重复访问的值。
警告:
indexed-repeat() 函数不能用于其引用的重复,因为会导致循环引用。 例如,以下表达式不能用于名为 defects 的重复内的计算:
indexed-repeat(${defect_type}, ${defects}, 3)
已知局限性
在 Survey123 中使用重复时,存在以下已知局限性和意外行为:
- 如果您的调查包含多个重复,并且其中一个具有地理点、geotrace 或 geoshape 问题,则系统可能不按顺序发布关系命名。
- 嵌套重复仅支持一对多的关系,而且每个子项只能有一个父项。
- 在 relevant 列和 repeat_count 列中均包含一个表达式的嵌套重复将清除第一条重复记录中已保存的所有现有数据。 为避免这种情况,请将相关表达式合并到 repeat_count 表达式中,以便在重复不相关时不创建重复记录。
- 包含嵌套重复的调查不支持在 Survey123 web 应用程序中或 Survey123 网站上编辑单个响应。