如何用Google Apps Script提取表格多列值并生成表单选项
多列提取非重复值并更新Google表单复选框
修改思路
- 定义需要处理的多列范围数组,比如
['G8:G', 'H8:H'],方便后续灵活添加或修改列 - 遍历每个列范围,逐列读取数据
- 对每一行的单元格值,过滤空值后检查是否已存在于结果列表,不存在则添加
- 保留原有的表单更新逻辑,用去重后的列表设置复选框选项
修改后的代码
var hojaActual = SpreadsheetApp.getActive(); function actualizarOpcionesFormulario() { // 定义需要处理的多列范围,可自行添加或修改列 const columnas = ['G8:G', 'H8:H']; var elementos = []; columnas.forEach(columna => { // 获取当前列的所有数据 const data = hojaActual.getRange(columna).getValues(); // 遍历当前列的每一行 data.forEach(row => { const valor = row[0]; // 过滤空值,且值未在列表中时添加 if (valor !== '' && elementos.indexOf(valor) === -1) { elementos.push(valor); } }); }); Logger.log('ELEMENTOS: ' + elementos); // 更新Google表单复选框选项 const idForm = "1Gn7cXU9l5MtoAelMt4gLmdj6mK1A2kAhswo"; const formulario = FormApp.openById(idForm); // 若需要替换现有选项,可先找到对应问题再更新,示例为新增一个复选框 formulario.addCheckboxItem() .setTitle("Funciono a medias") .setChoiceValues(elementos); }
关键说明
- 多列处理:通过
columnas数组批量管理要处理的列,新增列只需在数组中添加对应范围即可 - 空值过滤:新增
valor !== ''判断,避免将空单元格内容混入选项列表 - 去重逻辑:保持原有的
indexOf判断确保值唯一;若处理数据量较大,可改用Set提升效率,替换逻辑见下方
高效去重替代方案(大数据量推荐)
如果处理的列数据量较大,用Set去重性能更优,修改去重部分代码如下:
var elementos = new Set(); columnas.forEach(columna => { const data = hojaActual.getRange(columna).getValues(); data.forEach(row => { const valor = row[0]; if (valor !== '') { elementos.add(valor); } }); }); // 将Set转为数组,用于表单选项 elementos = Array.from(elementos);
内容的提问来源于stack exchange,提问作者Pablo Riquelme
相关产品推荐
相关产品推荐

