如何使用Apps Script提升Google Form表单项添加效率
优化Google Apps Script批量添加Form表单项的方法
Google Apps Script的Form Service确实没有提供官方的批量添加表单项接口,但可以通过以下几种方式大幅提升添加效率,解决循环逐个添加耗时过长的问题:
1. 复制已有表单项代替重复创建
创建一个模板文本项后,通过复制操作生成新项,再修改标题等属性。复制操作的API开销远低于从头创建新项,能有效减少执行时间。
function addFormItemsOptimized() { var startTime = new Date(); var form = FormApp.create("Test Optimized").setIsQuiz(true); // 创建基础模板项 var templateItem = form.addTextItem() .setTitle("Question number 1") .setHelpText("Hint: answer should not be more than a couple of words"); // 循环复制模板并修改标题 for (var i = 2; i < 100; i++) { var newItem = templateItem.copy(); newItem.setTitle("Question number " + i); form.addItem(newItem); } var endTime = new Date(); var runTime = (endTime - startTime)/1000; Logger.log("runtime is: " + runTime); }
2. 使用高级Forms API的BatchUpdate(最优方案)
通过高级Forms服务的batchUpdate方法,一次性提交所有创建表单项的请求,彻底避免循环中的多次网络往返,这是处理大量表单项时效率最高的方式。
前置步骤:
- 在脚本编辑器中,点击「扩展」→「Apps Script」→「服务」,启用「Forms API」;
- 同时需在Google Cloud Console中对应项目下启用Forms API(脚本关联的云项目可通过脚本编辑器的「项目设置」查看)。
function addFormItemsBatch() { var startTime = new Date(); // 创建表单并获取ID var form = FormApp.create("Test Batch").setIsQuiz(true); var formId = form.getId(); // 构建批量创建请求数组 var requests = []; for (var i = 1; i < 100; i++) { requests.push({ createItem: { item: { textItem: { title: "Question number " + i, helpText: "Hint: answer should not be more than a couple of words" }, title: "Question number " + i }, location: { index: i - 1 // 控制项在表单中的位置 } } }); } // 执行批量更新 Forms.Forms.batchUpdate({requests: requests}, formId); var endTime = new Date(); var runTime = (endTime - startTime)/1000; Logger.log("runtime is: " + runTime); }
额外说明
- 原代码的耗时波动主要来自网络请求的不稳定和Google服务的负载,优化后的方案能大幅降低这种波动;
- 当需要添加的项数超过100时,
batchUpdate的效率优势会更加明显,因为它将所有请求合并为一次网络调用。
内容的提问来源于stack exchange,提问作者Sherif
相关产品推荐
相关产品推荐

