如何将新建表格从我的云端硬盘移至共享云端硬盘?
解决方案:将新建表格保存到共享云端硬盘
修正后的完整代码
function SaveNewFinancials() { const spreadsheet = SpreadsheetApp.getActive(); const filename = spreadsheet.getRange("Inputs!B15").getValue(); // 直接指定工作表,无需切换激活状态 const sharedFolderId = "xxxxxxx3nTzzyS-I1pWzsejHDCh5"; // 目标共享文件夹ID const sharedDriveId = "xxxxxxxxenHXUk9PVA"; // 共享驱动器ID // 1. 在个人云端硬盘创建新表格 const newSpreadsheet = SpreadsheetApp.create(filename); const newFileId = newSpreadsheet.getId(); // 2. 复制指定工作表到新表格 spreadsheet.getSheetByName('Balance Sheet').copyTo(newSpreadsheet).setName("Balance Sheet"); spreadsheet.getSheetByName('Profit and Loss').copyTo(newSpreadsheet).setName("Profit and Loss"); newSpreadsheet.deleteSheet(newSpreadsheet.getSheetByName("Sheet1")); // 3. 使用高级Drive服务将文件移动到共享驱动器文件夹 Drive.Files.update( { parents: [ { driveId: sharedDriveId, id: sharedFolderId, isRoot: false } ] }, newFileId, null, { supportsAllDrives: true, // 移除原个人盘的父目录,彻底转移文件 removeParents: [DriveApp.getFileById(newFileId).getParents().next().getId()] } ); }
关键修改说明
- 简化工作表操作:直接通过
Inputs!B15定位单元格获取文件名,无需反复切换激活工作表,提升脚本效率。 - 替换错误的Drive API用法:
- 用
Drive.Files.update替代copy,实现文件从个人盘到共享盘的移动而非复制,避免冗余文件。 parents数组格式修正:driveId填写共享驱动器ID,id填写目标文件夹ID,确保指向正确的共享存储位置。- 强制添加
supportsAllDrives: true参数,这是操作共享驱动器文件的必要配置。
- 用
- 规避DriveApp局限性:DriveApp对共享驱动器的操作支持不完善,高级Drive服务是更可靠的方案,需确认已在脚本编辑器中启用(路径:编辑器 > 服务 > 添加服务 > 选择Drive API)。
额外注意事项
- 确保账号对目标共享文件夹拥有编辑权限,否则会触发权限报错。
- 若目标文件夹是共享驱动器的根目录,可将
isRoot设为true,此时id参数可省略(建议保留文件夹ID以保证准确性)。
内容的提问来源于stack exchange,提问作者Jess
相关产品推荐
相关产品推荐

