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

Google Sheets脚本复制工作表偶发失败求助:Service Spreadsheets异常

Google Sheets脚本偶发复制失败:Service Spreadsheets failed while accessing document

问题描述

执行Google Apps Script复制表格/工作表时偶发失败,报错信息:

Exception: Service Spreadsheets failed while accessing document with id "(源表格ID)"
报错位置:myFunction(test copy by ID:14:30)

涉及脚本代码:

function myFunction() {
  
var ss = SpreadsheetApp.openById("someID");
var NazevTpm = "TPM 11.08.2023 - RSA2"
var strojName = "TPM-RSA02"
var listTPMID = "someID";

ss.copyTo(SpreadsheetApp.openById(listTPMID)).setName(NazevTpm);

}

核心问题分析

你的代码存在方法误用:Spreadsheet.copyTo()的参数要求是Folder对象(用于将整个表格复制到指定文件夹),但你传入了另一个Spreadsheet对象。这种不符合API要求的调用会导致不可预期的行为,这是偶发失败的主要原因。

解决方案

根据实际需求选择对应的正确实现:

场景1:复制整个源表格到指定文件夹

如果需要将整个源表格复制到某个Drive文件夹并命名:

function myFunction() {
  // 替换为实际ID
  const sourceSsId = "源表格ID";
  const targetFolderId = "目标文件夹ID";
  const newSsName = "TPM 11.08.2023 - RSA2";

  const sourceSs = SpreadsheetApp.openById(sourceSsId);
  const targetFolder = DriveApp.getFolderById(targetFolderId);
  
  // 复制表格到目标文件夹并命名
  sourceSs.copyTo(targetFolder).setName(newSsName);
}

场景2:复制源表格中的单个工作表到目标表格

如果需要将源表格里的某个工作表复制到另一个已存在的表格:

function myFunction() {
  // 替换为实际ID和工作表名称
  const sourceSsId = "源表格ID";
  const targetSsId = "目标表格ID";
  const sourceSheetName = "要复制的工作表名称";
  const newSheetName = "TPM 11.08.2023 - RSA2";

  const sourceSs = SpreadsheetApp.openById(sourceSsId);
  const targetSs = SpreadsheetApp.openById(targetSsId);
  const sourceSheet = sourceSs.getSheetByName(sourceSheetName);
  
  // 复制工作表到目标表格并命名
  sourceSheet.copyTo(targetSs).setName(newSheetName);
}

处理偶发服务波动:添加重试机制

即使修正了方法调用,Google服务偶尔会有临时波动,可通过重试机制提升稳定性:

function myFunction() {
  const maxRetries = 3;
  let retryCount = 0;
  let success = false;

  while (retryCount < maxRetries && !success) {
    try {
      // 插入上述场景1或2的代码
      const sourceSsId = "源表格ID";
      const targetFolderId = "目标文件夹ID";
      const newSsName = "TPM 11.08.2023 - RSA2";

      const sourceSs = SpreadsheetApp.openById(sourceSsId);
      const targetFolder = DriveApp.getFolderById(targetFolderId);
      sourceSs.copyTo(targetFolder).setName(newSsName);

      success = true;
    } catch (e) {
      retryCount++;
      Logger.log(`复制失败,重试第${retryCount}次:${e.message}`);
      // 重试前等待1秒,避免频繁请求触发限制
      Utilities.sleep(1000);
    }
  }

  if (!success) {
    Logger.log(`多次重试后仍失败:${e.message}`);
  }
}

额外注意事项

  • 确保脚本运行者对源表格、目标表格/文件夹拥有编辑权限
  • 避免在短时间内频繁执行复制操作,可能触发Google服务的速率限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 16:04:58