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

求助完善Google Apps Script文件复制函数:无法正确复制图片文件

解决Google Apps Script复制图片文件变为HTML的问题

以下是修正后的完整脚本,能正确复制Drive中的图片(及其他类型文件)到目标文件夹,同时适配400-500个文件的批量处理需求:

function copyImg() {
  const ss = SpreadsheetApp.getActive();
  const fileSheet = ss.getSheetByName("file to copy");
  const lr = fileSheet.getLastRow();
  // 获取目标文件夹名称
  const nameFolder = `${ss.getRange("folder name!A2").getValue()} ${ss.getRange("folder name!B2").getDisplayValue()}`;

  // 获取目标文件夹(存在则复用,不存在则创建)
  let folder;
  const folders = DriveApp.getFoldersByName(nameFolder);
  if (folders.hasNext()) {
    folder = folders.next();
  } else {
    folder = DriveApp.createFolder(nameFolder);
  }

  // 获取E列的文件ID(从第2行开始,跳过表头)
  const fileIds = fileSheet.getRange(2, 5, lr - 1).getValues();
  
  // 循环复制每个文件
  for (let i = 0; i < fileIds.length; i++) {
    const fileId = fileIds[i][0].trim();
    // 跳过空ID
    if (!fileId) continue;
    
    try {
      // 根据ID获取源文件并复制到目标文件夹
      const sourceFile = DriveApp.getFileById(fileId);
      sourceFile.makeCopy(sourceFile.getName(), folder);
      
      // 每复制20个文件暂停1秒,避免触发谷歌服务配额限制
      if (i % 20 === 0 && i !== 0) {
        Utilities.sleep(1000);
      }
    } catch (e) {
      // 捕获错误并打印,避免单个文件失败导致整个脚本中断
      console.log(`复制文件ID ${fileId} 失败: ${e.message}`);
    }
  }

  SpreadsheetApp.getUi().alert(`文件复制完成!共处理 ${fileIds.length} 条记录`);
}

关键修正点说明

  • 精准获取文件ID范围:从第2行开始读取E列数据,跳过表头,避免空行无效数据
  • 正确复制文件:使用DriveApp.getFileById(fileId).makeCopy()方法,直接复制原文件到目标文件夹,完全保留文件格式(不会把图片转成HTML)
  • 批量处理优化:加入每20个文件暂停1秒的逻辑,避免触发谷歌服务的调用频率限制(处理400-500个文件时很重要)
  • 错误处理:加入try-catch块,单个文件复制失败时不会中断整个脚本,同时打印错误日志方便排查
  • 用户反馈:脚本结束后弹出提示框,告知处理完成情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:45:58