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

表单提交后将Google Sheets C列PDF链接文件复制到Drive指定文件夹报错排查

解决Google Apps Script中DriveApp.getFileById报错问题

错误原因分析

  • 文件ID提取逻辑不可靠:当前代码通过split("/")[fileLink.split("/").length - 2]提取ID,仅适配特定结构的链接,若链接包含额外参数(如?usp=sharing)或格式差异,会提取到无效内容。
  • 权限缺失:脚本运行账户无目标PDF文件的访问权限,导致无法通过ID获取文件对象。
  • 无效/空链接:表格C列存在空行或格式错误的链接,导致提取的ID无效。

解决方案及修改后的代码

function copyFilesToMasterFolder() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var fileLinks = sheet.getRange(2, 3, lastRow - 1, 1).getValues();
  var masterFolder = DriveApp.getFolderById("1y5ezQEbS0fDr2TcOjum5wOy6xWHHJcy1");
  // 适配所有Google Drive文件链接的ID匹配正则
  var fileIdRegex = /[-\w]{25,}/;

  for (var i = 0; i < fileLinks.length; i++) {
    var fileLink = fileLinks[i][0];
    if (!fileLink) continue; // 跳过空行

    var match = fileLink.match(fileIdRegex);
    if (!match) {
      console.log("无效链接,跳过行:" + (i + 2));
      continue;
    }

    var fileId = match[0];
    try {
      var file = DriveApp.getFileById(fileId);
      file.makeCopy(masterFolder);
      console.log("已复制文件:" + file.getName());
    } catch (e) {
      console.log("处理文件失败(ID:" + fileId + "):" + e.message);
    }
  }
}

关键修改说明

  1. 正则提取ID:使用/[-\w]{25,}/匹配Drive文件ID的固定格式(25-33位字母、数字、下划线或短横线),适配所有类型的Drive文件链接。
  2. 空行与无效链接处理:跳过空行,对无法匹配ID的链接打印日志后跳过,避免脚本中断。
  3. 错误捕获:通过try-catch捕获权限不足、ID无效等异常,同时输出详细日志,便于排查单个文件的问题。
  4. 日志跟踪:添加操作日志,方便确认文件复制状态及失败原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:55:17