如何让Google Apps Script仅提取谷歌表格中长度>1的列值填充表单
Google Apps Script: Filter Google Sheet Values to Only Include Valid Entries (Length >1) for Google Form List Item
我来帮你搞定这个问题!你的代码目前会提取A列从第3行开始的所有单元格值,但没有过滤空内容或长度≤1的条目。只需要在收集值的时候加个判断逻辑,就能精准筛选出有效内容。
修改后的完整代码
function getWorkbookNames(){ var form = FormApp.getActiveForm(); var items = form.getItems(); var ss = SpreadsheetApp.openByUrl('spreadsheetnamestringhere'); var sheet = ss.getSheetByName('Unique Databases'); // 获取A2到最后一行的所有数据(包含空行) var sheetValues = sheet.getRange("A2:A").getValues(); // 这里slice(1)会跳过A2的值,若想包含A2可直接删除该行,改用var values = sheetValues; var values = sheetValues.slice(1); var names = []; // 循环时添加过滤逻辑:仅保留长度>1的有效内容 for(var p = 0; p < values.length; p++){ var cellValue = values[p][0]; // 先判断单元格是否非空,再检查内容长度是否大于1 if (cellValue && cellValue.toString().length > 1) { names.push(cellValue); } } var pValues = items[8].asListItem(); pValues.setChoiceValues(names).setRequired(true); // 注意:原代码中values是A列数据,values[i][1]会返回undefined,这里大概率是笔误 // 如果需要提取B列数据,需把getRange("A2:A")改为"getRange("A2:B")",或单独获取B列范围 var areas = []; for (var i = 0; i < values.length; i++) { var areaValue = values[i][1]; // 若areas也需要过滤,同样添加判断逻辑 if (areaValue && areaValue.toString().length > 1) { areas.push(areaValue); } } }
关键修改说明
- 核心过滤逻辑:在循环收集值时,先通过
cellValue判断单元格是否为空(空单元格会返回空字符串,在条件判断中会被视为false),再用cellValue.toString().length > 1检查内容长度,直接跳过空行和短内容条目。 - 关于
slice(1):原代码里这一行会跳过A2单元格的值,如果你的有效数据是从A2开始的,直接删除这行即可。 - areas数组的小提醒:原代码中
values[i][1]试图获取第二列数据,但sheetValues只取了A列,所以会得到undefined。如果需要提取B列数据,记得调整getRange的范围。
内容的提问来源于stack exchange,提问作者Steve Wolfe
相关产品推荐
相关产品推荐

