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

求助:Google Apps Script无法生成XML及创建对应存储文件夹

问题排查与修正方案

代码中的核心问题

  • 函数嵌套无效:onFormSubmit和generateXML被嵌套在myFunction内部,Google Apps Script无法识别嵌套的触发器函数,导致表单提交时无法触发执行。
  • 变量未正确赋值:createXML函数仅在内部声明了xmlContent,但既没有调用该函数,也没有将值传递到外部,后续创建文件时xmlContent处于未定义状态。
  • XML格式隐患:直接拼接字符串生成XML时,若响应内容包含&、<、>等特殊字符,会导致XML文件格式失效。
  • 文件夹定位不可靠:使用getFoldersByName("Jenn").next()时,若Drive中有多个同名文件夹,可能获取到错误的父文件夹,建议改用文件夹ID精准定位。

修正后的完整代码

// 表单提交触发器函数,需设置为可安装触发器
function onFormSubmit(e) {
  var response = e.values;
  // 确认companyName对应索引正确(表单响应的第4个值,索引从0开始)
  var companyName = response[3];
  
  // 替换为你的"Jenn"文件夹ID,避免同名文件夹冲突
  var parentFolder = DriveApp.getFolderById("你的文件夹ID");
  
  // 创建公司名称文件夹(处理重名:若已存在则直接使用)
  var folder;
  try {
    folder = parentFolder.createFolder(companyName);
  } catch (e) {
    // 文件夹已存在时,获取现有文件夹
    folder = parentFolder.getFoldersByName(companyName).next();
  }
  
  // 生成XML内容
  var xmlContent = generateXML(response);
  
  // 创建XML文件(处理时间戳中的非法字符)
  var timestamp = new Date().toISOString().replace(/[:.]/g, "-");
  folder.createFile(`FormResponse_${timestamp}.xml`, xmlContent, MimeType.XML);
}

function generateXML(response) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 获取表头(D1到P1)
  var questions = sheet.getRange("D1:P1").getValues()[0];
  
  var xml = '<FormResponse>';
  for (var i = 0; i < questions.length; i++) {
    var tagName = questions[i].replace(/[^a-zA-Z0-9_-]/g, ""); // 清理标签名称,避免非法字符
    var value = escapeXml(response[i + 3]); // 转义XML特殊字符
    xml += `<${tagName}>${value}</${tagName}>`;
  }
  xml += '</FormResponse>';
  
  return xml;
}

// XML特殊字符转义函数
function escapeXml(str) {
  if (!str) return "";
  return str.replace(/&/g, "&amp;")
            .replace(/</g, "&lt;")
            .replace(/>/g, "&gt;")
            .replace(/"/g, "&quot;")
            .replace(/'/g, "&apos;");
}

关键配置步骤

  1. 设置可安装触发器:
    • 打开脚本编辑器,点击左侧「触发器」图标
    • 点击「添加触发器」,选择onFormSubmit函数,事件源选「表单提交」,完成授权保存
  2. 替换文件夹ID:
    • 打开Drive中的"Jenn"文件夹,地址栏末尾的字符串即为文件夹ID,替换代码中的你的文件夹ID
  3. 验证索引正确性:
    • 确认response[3]确实对应公司名称的位置,response[i+3]对应表头D1到P1的响应值,若表单字段调整需同步修改索引

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:20:31