如何根据变量值将文档保存到指定Google Drive文件夹?
替代Switch语句的几种实现方案
1. 使用对象映射表(最推荐)
把客户名和对应的文件夹ID做成键值对映射,直接通过客户名快速获取目标文件夹,比switch更简洁易维护,新增客户时只需在对象里加一行。
// 提前定义客户-文件夹ID映射 const clientFolderMap = { 'Bob': 'BobFolder的ID', 'Billy': 'BillyFolder的ID', 'Ben': 'BenFolder的ID' }; // 循环处理部分 rows.forEach(function (row, index) { // 跳过表头、已处理行的逻辑... const clientName = row[toIndex]; // 获取目标文件夹 const destinationFolder = DriveApp.getFolderById(clientFolderMap[clientName]); // 复制模板并保存到对应文件夹 const copy = googleDocTemplate.makeCopy(`INVOICE_${row[invNumIndex]}`, destinationFolder); const doc = DocumentApp.openById(copy.getId()); const body = doc.getBody(); body.replaceText('{{to}}', clientName); });
2. 按文件夹名称动态查找
如果文件夹名称和客户名严格对应(比如Bob对应BobFolder),可以直接通过名称查找文件夹,不用硬编码ID,适合文件夹ID可能变动的场景。注意:如果Drive里有同名文件夹,getFoldersByName会返回第一个匹配的,所以要确保文件夹名称唯一。
rows.forEach(function (row, index) { // 跳过表头、已处理行的逻辑... const clientName = row[toIndex]; // 拼接对应文件夹名称(比如Bob → BobFolder) const folderName = `${clientName}Folder`; // 获取目标文件夹(取第一个匹配的) const destinationFolder = DriveApp.getFoldersByName(folderName).next(); // 复制模板并保存 const copy = googleDocTemplate.makeCopy(`INVOICE_${row[invNumIndex]}`, destinationFolder); const doc = DocumentApp.openById(copy.getId()); const body = doc.getBody(); body.replaceText('{{to}}', clientName); });
3. 预加载文件夹映射(高效版)
如果客户数量较多,每次循环调用Drive服务会影响效率,可以一次性加载所有目标文件夹,构建成客户名到文件夹对象的映射,后续循环直接取用。
// 预加载所有客户文件夹到映射 const clientFolderMap = {}; // 假设所有客户文件夹都在同一个父文件夹下,先获取父文件夹 const parentFolder = DriveApp.getFolderById('父文件夹ID'); const folders = parentFolder.getFolders(); while (folders.hasNext()) { const folder = folders.next(); const folderName = folder.getName(); // 从文件夹名提取客户名(比如BobFolder → Bob) const clientName = folderName.replace('Folder', ''); clientFolderMap[clientName] = folder; } // 循环处理部分 rows.forEach(function (row, index) { // 跳过表头、已处理行的逻辑... const clientName = row[toIndex]; const destinationFolder = clientFolderMap[clientName]; const copy = googleDocTemplate.makeCopy(`INVOICE_${row[invNumIndex]}`, destinationFolder); const doc = DocumentApp.openById(copy.getId()); const body = doc.getBody(); body.replaceText('{{to}}', clientName); });
内容的提问来源于stack exchange,提问作者dan
相关产品推荐
相关产品推荐

