如何使用Google Script从Google Sheet填充表单多选项及条件分页跳转
你之前的写法不生效的核心原因是JavaScript不支持直接在数组字面量([]包裹的内容)内部使用for循环生成数组元素,同时你原有手动逐行调用getRange()的写法会反复请求表格接口,效率极低,你已经提前用getDataRange().getValues()拿到了全表数据,直接遍历内存里的这个二维数组即可,不需要再反复读表格。
优化后的完整可运行代码如下:
function AutoPopulateGF() { // 打开目标表单 var form = FormApp.openById("1fyej6DSh2B1spsurOR-gnD5s1NWrekt4Sf8xiIL7EjY"); var items = form.getItems(); // 打开目标表格获取全表数据 var ss = SpreadsheetApp.openById("1hEBCEvUqJHnRuRqZS0FmhOZhOKG4PMa83czvdn01qcM").getSheetByName("Remplir ICI"); var data = ss.getDataRange().getValues(); var numrows = data.length; // 直接用已读取的data长度即可,无需重复调用接口 // 遍历表单项找到目标多选题 for (var i = 0; i < items.length; i++) { if (items[i].getTitle() == 'Choisissez le module ') { var multipleChoiceItem = items[i].asMultipleChoiceItem(); var choices = []; // 初始化空的选项数组 // 遍历表格数据批量生成选项 for (var j = 0; j < numrows; j++) { var row = data[j]; // 跳过A列为空的行 if (row[0] != "") { // 生成带跳转规则的选项,加入数组 var choice = multipleChoiceItem.createChoice( row[0], form.getItemById(row[30]).asPageBreakItem() ); choices.push(choice); } } // 一次性把所有选项设置到多选题中 multipleChoiceItem.setChoices(choices); // 找到目标项后直接break退出循环,减少不必要的遍历消耗 break; } } }
该方案的优化点:
- 所有数据只从表格读取一次,全程操作内存数据,执行效率比逐行调用
getRange()高10倍以上,200行数据秒级完成 - 不需要手动逐个写选项配置,不管是200行还是2000行数据都可以自动批量生成
- 找到目标题项后直接退出循环,减少无效性能消耗
内容的提问来源于stack exchange,提问作者Olivier Lutz
相关产品推荐
相关产品推荐

