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

请求修改Google Script生成指定结构XML并实现文件导出

自定义Google Sheets转XML脚本(适配1200行数据)

一、核心脚本实现(非Web App版本)

以下脚本可直接在Google Sheet的脚本编辑器中运行,无需Web App,支持自定义XML根元素、子元素名称,将表头作为子元素标签,单元格内容作为标签值,可处理1200行数据:

function convertSheetToXML() {
  // 自定义配置项,可按需修改
  const ROOT_ELEMENT_NAME = "student-details";
  const RECORD_ELEMENT_NAME = "studentRecord";
  const XML_NAMESPACE = "http://www.w3.org/2001/XMLSchema-instance";
  
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 自动获取表格所有数据(包含表头和1200行内容)
  const data = sheet.getDataRange().getValues();
  
  if (data.length < 2) {
    SpreadsheetApp.getUi().alert("表格至少需要包含表头和一行数据");
    return;
  }
  
  // 提取第一行作为XML标签名
  const headers = data[0];
  
  // 构建XML内容
  let xmlContent = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n';
  xmlContent += `<${ROOT_ELEMENT_NAME} xmlns:xsi="${XML_NAMESPACE}">\n`;
  
  // 遍历数据行(跳过表头)
  for (let i = 1; i < data.length; i++) {
    const row = data[i];
    xmlContent += `  <${RECORD_ELEMENT_NAME}>\n`;
    
    // 生成每个单元格对应的XML标签和值
    for (let j = 0; j < headers.length; j++) {
      const header = headers[j].trim();
      const cellValue = row[j] ? row[j].toString().trim() : "";
      // 转义XML特殊字符,避免破坏结构
      const escapedValue = escapeXml(cellValue);
      xmlContent += `    <${header}>${escapedValue}</${header}>\n`;
    }
    
    xmlContent += `  </${RECORD_ELEMENT_NAME}>\n`;
  }
  
  xmlContent += `</${ROOT_ELEMENT_NAME}>`;
  
  // 将XML文件保存到Google Drive根目录
  const folder = DriveApp.getRootFolder();
  const file = folder.createFile("student-details.xml", xmlContent, MimeType.XML);
  
  SpreadsheetApp.getUi().alert(`XML文件已生成:${file.getName()}\n保存位置:Google Drive根目录`);
}

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

脚本关键点说明

  • 自定义配置:修改ROOT_ELEMENT_NAME和RECORD_ELEMENT_NAME即可调整XML的根元素和每条数据的包裹元素名称
  • 数据处理:用getDataRange()自动识别表格所有数据,1200行数据在Google Apps Script的处理能力范围内,无性能问题
  • XML合法性:内置特殊字符转义函数,避免<、&等字符破坏XML结构
  • 导出方式:直接生成XML文件到Google Drive,无需额外操作

二、XML文件导出方式

  1. 默认导出:运行上述脚本后,XML文件会自动保存到你的Google Drive根目录
  2. 指定文件夹保存:若需将文件保存到指定文件夹,可将DriveApp.getRootFolder()替换为:
    // 通过文件夹ID指定
    const folder = DriveApp.getFolderById("你的目标文件夹ID");
    // 或通过文件夹名称指定
    const folder = DriveApp.getFoldersByName("目标文件夹名称").next();
    

三、是否需要Web App?

  • 无需场景:仅在自己的Google Sheet中生成、导出XML,用上述非Web App脚本即可完全满足需求
  • 需要场景:需让其他用户访问生成XML,或实现直接下载XML到本地的功能,才需要创建Web App

四、Web App版本实现(可选,用于直接下载)

若需实现直接下载XML到本地的功能,可使用以下Web App版本脚本:

function doGet(e) {
  // 自定义配置项
  const ROOT_ELEMENT_NAME = "student-details";
  const RECORD_ELEMENT_NAME = "studentRecord";
  const XML_NAMESPACE = "http://www.w3.org/2001/XMLSchema-instance";
  
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();
  
  if (data.length < 2) {
    return ContentService.createTextOutput("表格至少需要包含表头和一行数据").setMimeType(ContentService.MimeType.TEXT);
  }
  
  const headers = data[0];
  let xmlContent = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n';
  xmlContent += `<${ROOT_ELEMENT_NAME} xmlns:xsi="${XML_NAMESPACE}">\n`;
  
  for (let i = 1; i < data.length; i++) {
    const row = data[i];
    xmlContent += `  <${RECORD_ELEMENT_NAME}>\n`;
    
    for (let j = 0; j < headers.length; j++) {
      const header = headers[j].trim();
      const cellValue = row[j] ? row[j].toString().trim() : "";
      const escapedValue = escapeXml(cellValue);
      xmlContent += `    <${header}>${escapedValue}</${header}>\n`;
    }
    
    xmlContent += `  </${RECORD_ELEMENT_NAME}>\n`;
  }
  
  xmlContent += `</${ROOT_ELEMENT_NAME}>`;
  
  // 返回XML文件,支持直接下载
  return ContentService.createTextOutput(xmlContent)
                       .setMimeType(ContentService.MimeType.XML)
                       .setFileName("student-details.xml");
}

function escapeXml(text) {
  return text.replace(/&/g, "&amp;")
             .replace(/</g, "&lt;")
             .replace(/>/g, "&gt;")
             .replace(/"/g, "&quot;")
             .replace(/'/g, "&apos;");
}

Web App创建步骤

  1. 打开Google Sheet的脚本编辑器(路径:工具 > 脚本编辑器)
  2. 粘贴上述Web App版本代码
  3. 点击右上角「部署」>「新部署」
  4. 部署设置:
    • 类型选择「Web应用」
    • 执行:选择「我」(需授权脚本访问你的Sheet数据)
    • 谁可以访问:按需选择「任何人,甚至匿名」或「仅限组织内用户」
    • 点击「部署」,完成授权流程
  5. 复制生成的Web App URL,访问该URL即可直接下载XML文件

五、使用提示

  • 非Web App版本可添加自定义菜单,方便快速触发:
    function onOpen() {
      const ui = SpreadsheetApp.getUi();
      ui.createMenu("XML工具")
        .addItem("生成XML文件", "convertSheetToXML")
        .addToUi();
    }
    
    添加后打开Sheet时,顶部会出现「XML工具」菜单,点击即可生成文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:47:46