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

保留电子签名时如何用DocumentApp打开Google Docs并修改内容

问题描述

我尝试用以下代码打开Google Docs文件并替换内容:

function openFile(){
  var doc = DocumentApp.openById("docId");
  var body = doc.getBody();
  body.replaceText("Name of Accountant","ABC");
}

运行时触发错误:

Exception: Unexpected error while getting the method or property openById on object DocumentApp.

经确认,该错误由文档内的电子签名模块导致(文档表格中包含电子签名)。

解决方案

目前DocumentApp确实无法直接打开带电子签名的文档,以下两种方法可无需删除签名实现修改需求:

方法1:通过Drive API复制文档后修改副本

利用Drive API复制原文档(复制过程会自动排除签名相关特殊元素),再对副本进行内容修改:

function modifySignedDoc() {
  const docId = "你的文档ID";
  // 复制原文档生成副本
  const copyFile = Drive.Files.copy(
    {title: "修改副本_" + new Date().toISOString()},
    docId,
    {supportsAllDrives: true, fields: "id"}
  );
  const copyDocId = copyFile.id;
  
  // 对副本执行内容替换
  const doc = DocumentApp.openById(copyDocId);
  const body = doc.getBody();
  body.replaceText("Name of Accountant","ABC");
  doc.saveAndClose();
  
  // 可选操作:若需要覆盖原文档,可删除原文档并重命名副本
  // Drive.Files.remove(docId);
  // Drive.Files.patch({title: "原文档名称"}, copyDocId);
}

注意:需在脚本编辑器中启用Drive API(路径:资源 → 高级Google服务,找到Drive API并开启)。

方法2:使用Docs API直接批量修改文本

Docs API支持直接对文档内容做补丁修改,无需完整打开文档,可避开DocumentApp的签名限制:

function modifyWithDocsAPI() {
  const docId = "你的文档ID";
  const requests = [
    {
      replaceAllText: {
        containsText: {text: "Name of Accountant"},
        replaceText: "ABC"
      }
    }
  ];
  Docs.Documents.batchUpdate({requests: requests}, docId);
}

注意:需在脚本编辑器中启用Docs API(路径同上),且确保账号拥有文档编辑权限。

补充说明

两种方法均无需手动删除原文档的电子签名:

  • 方法1通过副本修改,原文档签名完整保留;
  • 方法2直接通过API修改目标文本,不会触及签名模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 00:29:50