You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Apps Script从电子表格批量创建带自定义表单项的Google Forms

问题解决说明

1 原forEach语法错误原因

你之前的代码报错是因为单行箭头函数的forEach只会执行紧跟其后的第一句代码,添加表单项的逻辑写在了循环作用域外,既拿不到item变量,还会重复创建表单。正确的forEach写法需要用花括号包裹所有循环内逻辑,示例如下:

range.forEach(item => {
  const form = FormApp.create(item);
  // 所有添加表单项的逻辑都要写在这个花括号内
  form.addTextItem().setTitle('姓名');
})

2 表单存入指定文件夹的实现方案

你需要结合DriveApp接口,对每个生成的表单创建对应子文件夹并移动文件,修改后的完整代码如下:

function createForms() {
  // 邮箱格式校验规则
  const emailValidation = FormApp.createTextValidation()
  .setHelpText('输入内容必须为邮箱地址')
  .requireTextIsEmail()
  .build();

  // 替换引号内的内容为你指定的父文件夹ID,可从文件夹浏览器地址栏的URL中获取
  const parentFolder = DriveApp.getFolderById('替换为你的父文件夹ID');

  const ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('courses');
  const values = ss.getDataRange().getValues();

  for (let i = 0; i < values.length; i++) {
    // 如果你的表格每行有多列,需根据实际结构调整索引,[0]表示取当前行第一列的内容作为表单名
    const formName = values[i][0];
    // 1. 创建表单
    const form = FormApp.create(formName);
    // 2. 添加固定表单项
    form.addTextItem().setTitle("姓名").setHelpText('请输入你的全名').setRequired(true);
    form.addTextItem().setTitle("邮箱地址").setRequired(true).setValidation(emailValidation).setHelpText('请输入有效邮箱地址');
    form.addParagraphTextItem().setTitle('具体说明').setHelpText('请描述你需要说明的相关细节').setRequired(true);
    form.addMultipleChoiceItem().setTitle("可选日期").setHelpText('选择你最合适的日期').setRequired(true)
    .setChoiceValues(['周一', '周二','周三','周四','周五']);

    // 3. 在父文件夹下创建和表单同名的独立子文件夹
    const childFolder = parentFolder.createFolder(formName);
    // 4. 获取刚创建表单的Drive文件对象
    const formFile = DriveApp.getFileById(form.getId());
    // 5. 将表单移动到对应子文件夹
    childFolder.addFile(formFile);
    // 6. 删除云端硬盘根目录下的默认表单副本
    DriveApp.getRootFolder().removeFile(formFile);
  }
}

注意事项

  • 首次运行脚本如果触发权限申请,按引导完成授权即可
  • 如果不需要中文的表单提示,可自行替换为对应的英文内容

内容的提问来源于stack exchange,提问作者Tim Welch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:45:02