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

使用Google Apps Script合并Google Docs遇服务不可用问题求助

解决Google Apps Script合并文档时的「Service unavailable: Documents」错误

可能的错误原因及排查步骤

  • Docs服务临时故障:先确认Google Workspace的Docs服务是否正常运行,若服务处于故障状态,需等待官方修复。
  • API调用超限:Google Apps Script对Docs服务有调用配额,短时间内批量打开文档会触发限制,需降低调用频率。
  • 文档权限问题:确保脚本运行者拥有所有待合并文档的编辑权限,避免因权限不足导致服务调用失败。
  • 代码逻辑缺陷:原代码存在废弃API使用、跳过首个文档、冗余图片处理等问题,会增加服务调用失败的概率。

优化后的修复代码

以下是修正后的合并脚本,解决了原代码的核心问题并添加了容错机制:

function mergeGoogleDocs() {
  var folderId = "####"; // 替换为你的目标文件夹ID
  var folder = DriveApp.getFolderById(folderId);
  var docIDs = [];
  var combinedDoc = DocumentApp.create("Merged Document");
  var baseBody = combinedDoc.getBody();

  // 只筛选文件夹内的Google Docs文件,避免处理非文档类型
  var files = folder.getFilesByType(MimeType.GOOGLE_DOCS);

  // 收集所有符合条件的文档ID
  while (files.hasNext()) {
    var file = files.next();
    docIDs.push(file.getId());
  }

  for (var i = 0; i < docIDs.length; ++i) {
    try {
      var otherDoc = DocumentApp.openById(docIDs[i]);
      var otherBody = otherDoc.getBody(); // 替换已废弃的getActiveSection()
      var totalElements = otherBody.getNumChildren();

      for (var j = 0; j < totalElements; ++j) {
        var element = otherBody.getChild(j).copy();
        var type = element.getType();

        switch(type) {
          case DocumentApp.ElementType.PARAGRAPH:
            baseBody.appendParagraph(element);
            break;
          case DocumentApp.ElementType.TABLE:
            baseBody.appendTable(element);
            break;
          case DocumentApp.ElementType.LIST_ITEM:
            baseBody.appendListItem(element);
            break;
          case DocumentApp.ElementType.INLINE_IMAGE:
            // 直接使用图片Blob插入,无需先保存到文件夹
            var blob = element.asInlineImage().getBlob();
            baseBody.appendImage(blob);
            break;
          default:
            // 跳过未知元素类型,避免中断整个合并流程
            console.log('跳过未知元素类型: ' + type);
        }
      }
      // 每个文档处理后添加1秒延迟,避免触发API调用限制
      Utilities.sleep(1000);
    } catch (e) {
      // 记录单个文档的错误,不影响其他文档合并
      console.log('处理文档ID ' + docIDs[i] + ' 时出错: ' + e.message);
    }
  }

  console.log('合并完成,合并文档ID: ' + combinedDoc.getId());
}

额外排查建议

  • 检查脚本授权:运行脚本时确保授予了Drive和Docs服务的完整访问权限
  • 分批次测试:若文档数量较多,先尝试合并少量文档验证脚本有效性
  • 查看执行日志:在脚本编辑器的「查看」→「日志」中查看详细错误信息,定位具体故障文档

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:03:28