如何通过Apps Script将Google Drive新建文件夹链接填入Google Sheet指定单元格并分享
可实现需求的完整Apps Script代码
function createClientAccountFolder(clientNamefolder) { // 替换为你存储所有客户文件夹的根目录ID const customerRoot = DriveApp.getFolderById('你的根文件夹ID'); const ss = SpreadsheetApp.getActiveSpreadsheet(); const databaseSheet = ss.getSheetByName("Clients"); const lastAvailableRow = databaseSheet.getLastRow(); // 第2列是客户名称,和你的原有逻辑一致 const clientName = databaseSheet.getRange(lastAvailableRow, 2).getValue(); // 第3列是客户邮箱,如果你存储邮箱的列不同,修改第二个参数即可(C列是3、D列是4以此类推) const clientEmail = databaseSheet.getRange(lastAvailableRow, 3).getValue(); if (clientNamefolder && clientEmail) { // 创建客户主文件夹 const mainFolder = customerRoot.createFolder(clientNamefolder); const folderUrl = mainFolder.getUrl(); // 需求1:将超链接写入当前新增行的K列(第11列) databaseSheet.getRange(lastAvailableRow, 11).setFormula(`=HYPERLINK("${folderUrl}","${clientName}专属文件夹")`); // 需求2:给客户授予文件夹编辑权限 mainFolder.addEditor(clientEmail); // 需求2:给客户发送通知邮件,标题和内容可自定义 MailApp.sendEmail({ to: clientEmail, subject: `${clientName} 专属服务文件夹已开通`, htmlBody: ` <p>您好:</p> <p>您的服务专属文件夹已创建完成,点击即可访问:<a href="${folderUrl}" target="_blank">${folderUrl}</a></p> <p>我们已为您开通编辑权限,如有疑问可随时对接工作人员。</p> ` }) // 创建子文件夹 const action_tracker = mainFolder.createFolder(`[SEO] - Action Tracker [${clientNamefolder}]`); const audit = mainFolder.createFolder(`[SEO] - Audits [${clientNamefolder}]`); // 补全原有代码缺失的content文件夹声明,解决变量未定义报错 const content = mainFolder.createFolder(`[SEO] - Content [${clientNamefolder}]`); // 创建content下的子文件夹 content.createFolder(`[${clientName}] Content Approved`); content.createFolder(`[${clientName}] Content Draft`); // 替换为你自己的模板表格ID const action_tracker_sheet = DriveApp.getFileById('你的Action Tracker模板表ID'); const analytics_audit = DriveApp.getFileById('你的Analytics Audit模板表ID'); // 移动模板文件到对应文件夹 const moved_action_tracker_sheet = action_tracker_sheet.moveTo(action_tracker); const moved_analytics_audit = analytics_audit.moveTo(audit); // 修正原有代码的重命名逻辑错误 SpreadsheetApp.openById(moved_action_tracker_sheet.getId()).rename(`${clientName} Action Tracker`); SpreadsheetApp.openById(moved_analytics_audit.getId()).rename(`${clientName} Analytics Audit`); } else { Logger.log('缺少客户名称或客户邮箱,未创建文件夹') } } // 测试函数 function test(){ const ss = SpreadsheetApp.getActiveSpreadsheet(); const databaseSheet = ss.getSheetByName("Clients"); const lastAvailableRow = databaseSheet.getLastRow(); const clientName = databaseSheet.getRange(lastAvailableRow, 2).getValue(); createClientAccountFolder(clientName) }
改动说明
- 修复原有代码的两个核心报错:补全了缺失的
content变量声明,修正了表格重命名的错误语法 - 需求1实现:放弃了原有覆盖整个K列的写法,仅将超链接写入本次新增客户对应的最后一行的K列,不会影响历史数据
- 需求2实现:新增了读取客户邮箱、为客户授予文件夹编辑权限、发送通知邮件的逻辑,邮件内容和列号可根据你的实际业务调整
注意事项
首次运行需要授权对应权限,触发方式可以保留你原来的HTML表单提交触发逻辑,无需额外修改。
内容的提问来源于stack exchange,提问作者Mubashir Rehman
相关产品推荐
相关产品推荐

