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

Apps Script如何按单元格匹配的文件夹ID将表格复制到对应文件夹

错误原因

你代码中getRange(6,5)对应的是E6单元格,你注释里也明确了这里存储的是项目名称,不是合法的Drive文件夹ID,将无效值传入getFolderById方法就会触发该异常。手动填写ID可以正常运行也验证了这一点。

解决方案

你可以根据需求二选一:

方案1:新增列存储对应文件夹ID

如果你可以在表格里提前维护好项目对应的文件夹ID,比如把ID存到F6单元格,直接修改folderId的取值逻辑即可:

function copyDocument() {
    var ss = SpreadsheetApp.getActiveSpreadsheet(); // 获取当前激活的电子表格
    var sstocopy = DriveApp.getFileById(ss.getId()); // 用DriveApp获取当前表格文件
    var sheet = ss.getSheetByName("PO"); // 获取名为PO的工作表
    var project = sheet.getRange("E6").getValue(); // 获取项目名称,用于生成复制后的文件名
    var poNumber = sheet.getRange("C6").getValue(); // 获取PO编号,用于生成复制后的文件名
    var folderId = sheet.getRange("F6").getValue(); // 改为从F6单元格取文件夹ID
    var folder = DriveApp.getFolderById(folderId); // 获取目标文件夹对象
    sstocopy.makeCopy('PO ' + project + " (" + poNumber + ")",folder); // 复制表格到目标文件夹
}

方案2:通过项目名称匹配文件夹名称获取目标文件夹

如果你不需要提前维护ID,想直接用E6的项目名称匹配Drive里的文件夹,可使用以下代码,适配你需求里“单元格值匹配文件夹名称”的要求:

function copyDocument() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sstocopy = DriveApp.getFileById(ss.getId());
    var sheet = ss.getSheetByName("PO");
    var project = sheet.getRange("E6").getValue();
    var poNumber = sheet.getRange("C6").getValue();

    // 按名称搜索Drive内的文件夹
    var folderSearchResults = DriveApp.getFoldersByName(project);
    // 判断是否找到匹配的文件夹
    if (folderSearchResults.hasNext()) {
        var folder = folderSearchResults.next();
        sstocopy.makeCopy('PO ' + project + " (" + poNumber + ")", folder);
    } else {
        SpreadsheetApp.getUi().alert("未找到名称为【" + project + "】的对应文件夹,请检查名称是否匹配");
    }
}

注意事项

  • 如果存在多个同名文件夹,方案2默认会取搜索结果里的第一个文件夹,建议给项目名加唯一标识避免重名问题
  • 确保当前脚本执行的账号对目标文件夹有编辑权限
  • 首次运行需要授权脚本访问Drive和表格的权限

文件夹结构参考

文件夹结构示意图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:18:00