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

如何编写通用脚本将Team Drive文件复制到用户My Drive?

解决方案:动态获取多用户My Drive并复制文件

嘿,这个问题我刚好有经验,来给你梳理下可行的方案!你要实现的是把Team Drive里的文件动态复制到多用户的My Drive,核心难点就是怎么获取每个用户的My Drive根目录(不用静态URL),下面分两种场景给你具体代码和说明:

场景1:仅复制到当前用户的My Drive

如果只是给运行脚本的用户自己复制,那超级简单,直接用DriveApp.getRootFolder()就能获取当前用户的My Drive根目录,替换你代码里的???就行:

function saveAsSpreadsheet(){ 
  var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
  var sourceFile = DriveApp.getFileById(sheet.getId());
  
  // 用getUi().prompt替代旧的Browser.inputBox,兼容性更好
  var prompt = SpreadsheetApp.getUi().prompt(
    'Save File', 
    'Enter the name of the file', 
    SpreadsheetApp.getUi().ButtonSet.OK_CANCEL
  );
  
  if (prompt.getSelectedButton() === SpreadsheetApp.getUi().Button.CANCEL) return;
  var newName = prompt.getResponseText();
  
  // 获取当前用户的My Drive根目录
  var userMyDrive = DriveApp.getRootFolder();
  sourceFile.makeCopy(newName, userMyDrive); 
}

场景2:批量复制到多用户的My Drive(Workspace管理员专属)

如果是要批量复制到域内多个用户的My Drive,你需要用到域范围授权(Domain-Wide Delegation),这是Google Workspace管理员才能用的功能,允许你模拟域内用户访问他们的Drive。步骤如下:

前置准备

  1. 在脚本编辑器中启用Drive API高级服务:点击「资源」→「高级Google服务」,找到Drive API并启用。
  2. 在Google Cloud控制台为你的脚本项目配置域范围授权,授予https://www.googleapis.com/auth/drive权限(具体配置步骤可以参考Google官方文档)。

实现代码

function saveToMultipleUsersMyDrive() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var sourceFile = DriveApp.getFileById(sheet.getId());
  
  // 这里可以手动定义目标用户邮箱,或者从表格中读取(比如sheet.getRange("A2:A10").getValues().flat())
  var targetUserEmails = ['user1@yourdomain.com', 'user2@yourdomain.com'];
  
  var prompt = SpreadsheetApp.getUi().prompt(
    'Save File', 
    'Enter the name of the file', 
    SpreadsheetApp.getUi().ButtonSet.OK_CANCEL
  );
  
  if (prompt.getSelectedButton() === SpreadsheetApp.getUi().Button.CANCEL) return;
  var newName = prompt.getResponseText();
  
  // 遍历每个用户,复制文件到他们的My Drive
  targetUserEmails.forEach(function(userEmail) {
    try {
      // 模拟目标用户,获取他们的My Drive根文件夹ID
      var rootFolderInfo = Drive.Files.get('root', {
        supportsAllDrives: true,
        fields: 'id'
      }, {
        userEmail: userEmail // 关键:模拟域内用户访问
      });
      
      // 获取目标用户的My Drive根文件夹对象
      var userMyDrive = DriveApp.getFolderById(rootFolderInfo.id);
      
      // 复制文件到该用户的My Drive
      var copyFile = sourceFile.makeCopy(newName, userMyDrive);
      Logger.log(`✅ 文件已复制到${userEmail}的My Drive,副本ID:${copyFile.getId()}`);
    } catch (error) {
      Logger.log(`❌ 复制到${userEmail}失败:${error.message}`);
    }
  });
}

关键注意事项

  • 权限问题:源文件(Team Drive中的文件)需要设置允许域内用户访问,或者你作为管理员有足够权限复制该文件。
  • 弃用提醒:旧的Browser.inputBox已经被Google标记为弃用,建议用SpreadsheetApp.getUi().prompt()替代,避免后续脚本报错。
  • 非管理员限制:如果你不是Workspace管理员,无法批量访问其他用户的My Drive,只能让每个用户自己运行脚本(对应场景1),或者通过OAuth授权让用户主动授予你访问他们Drive的权限(这种流程更复杂,适合Web应用场景)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:58:09