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

如何通过Google Apps Script和Docs API为每条建议正确添加前置编号?

Google Docs API批量添加建议前置编号偏移问题

问题详情

我使用Google Apps Script结合Google Docs API的Batchupdate功能,尝试为每条建议添加前置编号,但只有第一条能正确放置,后续编号开始出现偏移。

当前实现结果

当前效果如下:
当前实现结果

已尝试方案

以下是我当前使用的代码片段:

function markNumberInFrontOfMark(fileID) {
  fileID = "MYFILEID";
  let doc = Docs.Documents.get(fileID);
  let requests = doc.body.content.flatMap(content => {
    if (content.paragraph) {
      let elements = content.paragraph.elements;
      return elements.flatMap(element => element.textRun.suggestedDeletionIds ? {
        insertText: {
          text: "(1)",
          location: {
            index: element.startIndex
          }
        }
      } : []);
    }
    return [];
  });
  Docs.Documents.batchUpdate({requests}, fileID);
  return true;
}

期望实现结果

希望达到的效果如下:
期望实现结果

参考帖子

《如何通过GAS和Google DOC API基于建议修改文本》


解决方案

偏移问题的核心原因是:BatchUpdate按顺序执行插入请求时,前面插入的文本会增加后续元素的索引位置,导致后续插入点偏移。解决方法是从后往前处理插入请求,同时分配正确的递增编号:

function markNumberInFrontOfMark(fileID) {
  fileID = "MYFILEID";
  let doc = Docs.Documents.get(fileID);
  let suggestionPositions = [];

  // 收集所有带建议删除标记的元素起始索引
  doc.body.content.forEach(content => {
    if (content.paragraph) {
      content.paragraph.elements.forEach(element => {
        if (element.textRun?.suggestedDeletionIds) {
          suggestionPositions.push(element.startIndex);
        }
      });
    }
  });

  // 按索引从大到小排序,确保从后往前插入,避免索引偏移
  suggestionPositions.sort((a, b) => b - a);

  // 生成批量请求,分配正序编号
  let requests = suggestionPositions.map((index, idx) => ({
    insertText: {
      text: `(${suggestionPositions.length - idx})`,
      location: { index }
    }
  }));

  Docs.Documents.batchUpdate({ requests }, fileID);
  return true;
}

说明

  1. 先收集所有需要插入编号的位置,再按索引从大到小排序,这样从文档末尾往开头插入,前面的插入操作不会影响后续要处理的位置索引。
  2. 通过suggestionPositions.length - idx计算编号,确保最终显示的编号是从(1)开始递增的正序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:25:30