基于单元格值将新建Google Doc移至对应文件夹或创建新文件夹
修改后的Google Apps Script代码
function createNewGoogleDocs() { // 替换为你的模板文档ID const googleDocTemplate = DriveApp.getFileById("你的模板文档ID"); // 替换为父文件夹ID(所有客户文件夹将创建在此文件夹下) const parentFolder = DriveApp.getFolderById("你的父文件夹ID"); const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Overview'); const rows = sheet.getDataRange().getValues(); rows.forEach(function(row, index) { if(index === 0) return; // 跳过表头 if (row[16]) return; // 跳过已生成文档的行 const customerName = row[4]; // E列内容(索引从0开始) // 获取或创建客户对应的文件夹 const targetFolder = getOrCreateFolder(parentFolder, customerName); // 复制模板文档到目标文件夹,文件名可按需调整 const copy = googleDocTemplate.makeCopy(`${customerName} 专属文档`, targetFolder); const doc = DocumentApp.openById(copy.getId()); const body = doc.getBody(); // 替换文档中的占位符(保留原有替换逻辑,可按需扩展) body.replaceText('{{Customer}}', customerName); doc.saveAndClose(); const url = doc.getUrl(); sheet.getRange(index + 1, 17).setValue(url); }); } // 辅助函数:查找指定文件夹,不存在则创建 function getOrCreateFolder(parentFolder, folderName) { try { const folders = parentFolder.getFoldersByName(folderName); if (folders.hasNext()) { return folders.next(); } else { return parentFolder.createFolder(folderName); } } catch (e) { Logger.log("获取或创建文件夹时出错: " + e); throw e; } }
关键修改说明
- 动态目标文件夹逻辑:移除固定目标文件夹,改为通过
getOrCreateFolder函数根据E列(row[4])内容,自动查找或创建对应文件夹。 - 新增辅助函数:
getOrCreateFolder负责检查父文件夹下是否存在同名文件夹,存在则直接返回,不存在则创建后返回,实现需求中的判断逻辑。 - 动态文档命名:将复制后的文档名与客户名称绑定,便于识别对应关系,可根据需求调整命名规则。
- 保留原有核心逻辑:保留跳过表头、跳过已生成行、占位符替换、写入文档URL到表格的功能,确保原有流程不受影响。
使用注意事项
- 替换代码中的
你的模板文档ID和你的父文件夹ID为实际ID值。 - 若需在Drive根目录创建客户文件夹,可将
parentFolder改为DriveApp.getRootFolder()。 - 首次运行需完成授权流程,按照提示操作即可。
内容的提问来源于stack exchange,提问作者erlichb
相关产品推荐
相关产品推荐

