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

Apps Script表单提交无法创建含数据Google Docs,仅生成空白PDF求助

问题排查与修复方案

核心问题分析

  1. 文件夹ID参数错误:DriveApp.getFolderById("Spa Job Log Repository")传入的是文件夹名称而非实际Drive文件夹ID(ID是一串类似1abcXYZ...的字符),直接导致获取文件夹失败。
  2. 文档复制时机错误:先将空白文档复制到目标文件夹,之后才写入表单数据,导致目标文件夹内是空白副本,写入内容的文档留在Drive根目录。
  3. 文件夹存在性判断逻辑无效:直接调用getFoldersByName(folderName).next(),找不到文件夹会抛出异常,无法进入else分支。
  4. 响应获取方式不可靠:读取表格最后一行获取响应,短时间多提交易出现数据错乱;表单触发函数可通过事件对象直接获取当前提交的响应,更准确。

修复后的完整代码

function onFormSubmitTrigger(e) {
  // 直接通过事件对象获取当前提交的响应,无需读取表格最后一行
  var formResponse = e.response.getItemResponses();
  createDocFromFormResponse(formResponse);
}

function createDocFromFormResponse(formResponse) {
  var folderId = "替换成你的目标文件夹ID"; // 此处填写实际的Drive文件夹ID
  var targetFolder;
  
  try {
    targetFolder = DriveApp.getFolderById(folderId);
  } catch (err) {
    Logger.log("目标文件夹不存在,错误信息:" + err);
    return;
  }

  // 生成唯一文档名称,避免重名覆盖
  var timestamp = new Date().toISOString().replace(/[:.]/g, "-");
  var docName = "表单响应_" + timestamp;
  
  // 创建文档并写入表单内容
  var newDoc = DocumentApp.create(docName);
  var body = newDoc.getBody();
  
  // 按问题+答案的格式遍历写入
  formResponse.forEach(function(itemResp, index) {
    var question = itemResp.getItem().getTitle();
    var answer = itemResp.getResponse();
    body.appendParagraph("Q" + (index + 1) + ": " + question);
    body.appendParagraph("A" + (index + 1) + ": " + answer);
    body.appendParagraph("---"); // 添加分隔线增强可读性
  });
  
  newDoc.saveAndClose();
  
  // 将文档移动到目标文件夹(而非复制)
  var docFile = DriveApp.getFileById(newDoc.getId());
  docFile.moveTo(targetFolder);
}

function createTrigger() {
  var formId = '1jGAWZXcOHOfbM1uk88QMBg-yl4VdSHxynRM-NHawASQ';
  var form = FormApp.openById(formId);
  
  // 删除已存在的同名触发器,避免重复执行
  var existingTriggers = ScriptApp.getProjectTriggers();
  existingTriggers.forEach(function(trigger) {
    if (trigger.getHandlerFunction() === 'onFormSubmitTrigger') {
      ScriptApp.deleteTrigger(trigger);
    }
  });
  
  // 创建新的表单提交触发器
  ScriptApp.newTrigger('onFormSubmitTrigger')
    .forForm(form)
    .onFormSubmit()
    .create();
}

关键修复点说明

  • 事件对象获取响应:表单触发时函数自动接收e参数,通过e.response直接获取当前提交的问题与答案,避免并发提交导致的数据错乱。
  • 修正文件夹ID:将folderId替换为目标文件夹的实际ID(可在Drive文件夹URL中获取)。
  • 先写内容再移动文档:创建文档后立即写入数据,保存后再移动到目标文件夹,确保目标文件夹内的文档有内容。
  • 唯一文档名:添加时间戳,避免多提交时文档重名覆盖。
  • 异常处理:用try-catch捕获文件夹不存在的情况,避免脚本崩溃。
  • 清理重复触发器:创建新触发器前删除旧的同名触发器,防止重复执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:16:33