如何修改现有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); } } }
使用说明
- 先把CONFIG配置区的所有ID替换为你自己的资源ID,
SHEET_FOLDER_MAP按实际的工作表名和对应文件夹ID补全即可 - 如果你的月份有特殊命名规则,直接调整
monthSheetRegex正则即可适配 - 运行
createDocsForAllMonthSheets函数即可自动处理所有符合要求的工作表,生成的文档会直接存入对应文件夹
内容的提问来源于stack exchange,提问作者Andoriod
相关产品推荐
相关产品推荐

