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

如何修改现有Apps Script代码适配所有符合格式的电子表格标签

代码修改方案

核心调整说明

  • 新增正则规则匹配「月份 年份」格式的工作表名称,自动过滤不符合规则的标签
  • 新增工作表与目标存储文件夹的映射配置,生成的文档会自动存入对应文件夹,避免散落在Google Drive根目录
  • 保留原有模板替换、列表插入的全部逻辑,兼容原有业务规则
  • 优化了空行校验逻辑,避免生成无效空白文档

完整修改后代码

// 配置区域:使用前先修改为你自己的对应ID即可
const CONFIG = {
  // 当前Google表格的ID
  SPREADSHEET_ID: '1wjmfG-mTYFw_JQZIondppy-VxffdV3fFzcEi8Og',
  // 文档模板ID
  TEMPLATE_ID: '1B2IzVd03MmoPtT7Tcvce8I9wXGrb6fYXCnz8JikAs',
  // 工作表名称和对应存储文件夹ID的映射,工作表名要和实际完全一致
  SHEET_FOLDER_MAP: {
    'Juli 2021': '此处填写Juli 2021对应文件夹的ID',
    'August 2021': '此处填写August 2021对应文件夹的ID',
    // 后续新增月份工作表直接在这里加对应配置即可
  },
  // 表头所在单元格范围
  HEADER_RANGE: 'A5:K5',
  // 业务数据所在单元格范围
  DATA_RANGE: 'H6:K4000'
}

function createDocsForAllMonthSheets() {
  // 匹配「月份 4位年份」格式的正则,已经兼容中英文月份命名
  const monthSheetRegex = /^[A-Za-z\u4e00-\u9fa5]+ \d{4}$/;
  // 获取当前表格所有工作表
  const allSheets = SpreadsheetApp.openById(CONFIG.SPREADSHEET_ID).getSheets();

  // 遍历所有工作表,过滤符合命名规则的目标标签
  allSheets.forEach(sheet => {
    const sheetName = sheet.getName();
    // 不符合命名规则、或者没有配置对应存储文件夹的工作表直接跳过
    if (!monthSheetRegex.test(sheetName) || !CONFIG.SHEET_FOLDER_MAP[sheetName]) return;

    // 获取当前工作表的表头和业务数据
    const headers = Sheets.Spreadsheets.Values.get(CONFIG.SPREADSHEET_ID, `${sheetName}!${CONFIG.HEADER_RANGE}`);
    const tactics = Sheets.Spreadsheets.Values.get(CONFIG.SPREADSHEET_ID, `${sheetName}!${CONFIG.DATA_RANGE}`);
    // 获取当前工作表对应的存储文件夹对象
    const targetFolder = DriveApp.getFolderById(CONFIG.SHEET_FOLDER_MAP[sheetName]);

    // 遍历当前工作表的所有数据行生成文档
    for(let i = 0; i < tactics.values.length; i++){
      const row = tactics.values[i];
      const textId = row[0] || '';
      const titel = row[1] || '';
      const words = row[3] || '';

      // 跳过核心字段为空的无效行
      if (!textId || !titel) continue;

      // 直接复制模板到指定文件夹并命名,无需后续移动文件
      const newDoc = DriveApp.getFileById(CONFIG.TEMPLATE_ID).makeCopy(
        `NEW ${textId} ${titel} ${words}`,
        targetFolder
      );
      const documentId = newDoc.getId();

      // 替换模板内的占位符
      const body = DocumentApp.openById(documentId).getBody();
      body.replaceText('##textID##', textId);
      body.replaceText('##subject##', titel);
      body.replaceText('##words##', words);

      // 追加战术列表内容
      parseTactics(headers.values[0], row, body);
    }
  })
}

function parseTactics(headers, tactics, body){ 
  for(let i = 1; i < tactics.length; i++){
    if(tactics[i] != '') {
      body.appendListItem(`${headers[i]} | ${tactics[i]} net`).setGlyphType(DocumentApp.GlyphType.BULLET);
    }
  }
}

使用说明

  1. 先把CONFIG配置区的所有ID替换为你自己的资源ID,SHEET_FOLDER_MAP按实际的工作表名和对应文件夹ID补全即可
  2. 如果你的月份有特殊命名规则,直接调整monthSheetRegex正则即可适配
  3. 运行createDocsForAllMonthSheets函数即可自动处理所有符合要求的工作表,生成的文档会直接存入对应文件夹

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:54:06