如何根据 GAS 和 Google DOC API 的建议更改文本

How to change the text based on suggestions through GAS and Google DOC API

如题,昨天学习了如何在, and I refer to 中获取API文档的All-suggestion-accepted内容,知道了如何获取建议的插入和删除。另外,通过上面的方法,我可以检索到插入和删除的起始索引(插入或删除在文档中开始的位置)和结束索引(插入或删除在文档中结束的位置)。

那么,我是否可以对以索引为位置的所有建议接受的内容进行修改,例如在插入或删除部分下划线?这样做会不会出错?

这是Google文档API返回给我的数组,格式为 [suggestedDeletionIds,"delete",content,startIndex,endIndex]

这是我对文档做的插入和删除,我想根据索引在文档的全部建议接受内容中强调删除和插入部分。

下面是代码片段和代码片段的结果,最后两位数字是插入或删除的开始和结束索引。

function get_all_insertion_deletion() {
  var documentId = "MYDOCUMENTID";
  var doc = Docs.Documents.get(documentId);
  remove_all(documentId);
  doc.body.content.forEach(function (content){
    if (content.paragraph) {
      var elements = content.paragraph.elements;
      
      elements.forEach(function (element){
        if(element.textRun.suggestedDeletionIds)
        {
          var d_length= element.endIndex-element.startIndex;
          var d= [element.textRun.suggestedDeletionIds,"delete",element.textRun.content,element.startIndex,element.endIndex];
          Logger.log(d);
          deletion++;
        }
        if(element.textRun.suggestedInsertionIds)
        {
          var i_length= element.endIndex-element.startIndex;
          var i= [element.textRun.suggestedInsertionIds,"insert",element.textRun.content,element.startIndex,element.endIndex];
          Logger.log(i);
          insertion++; }  }); }
      });
    }
 

我相信你的目标如下。

  • 您想在 Google 文档中为脚本的“删除”和“插入”部分添加下划线。

为了达到你的目的,当你的脚本修改后变成如下。

修改后的脚本:

function get_all_insertion_deletion() {
  var documentId = "MYDOCUMENTID";
  var doc = Docs.Documents.get(documentId);
  var requests = [];
  doc.body.content.forEach(function (content) {
    if (content.paragraph) {
      var elements = content.paragraph.elements;

      elements.forEach(function (element) {
        if (element.textRun.suggestedDeletionIds) {
          // var d_length = element.endIndex - element.startIndex;  // This is not used.
          var d = [element.textRun.suggestedDeletionIds, "delete", element.textRun.content, element.startIndex, element.endIndex];
          Logger.log(d);
          requests.push({ updateTextStyle: { range: { startIndex: element.startIndex, endIndex: element.endIndex }, textStyle: { underline: true }, fields: "underline" } });
          // deletion++; // This is not used.
        }
        if (element.textRun.suggestedInsertionIds) {
          // var i_length = element.endIndex - element.startIndex;  // This is not used.
          var i = [element.textRun.suggestedInsertionIds, "insert", element.textRun.content, element.startIndex, element.endIndex];
          requests.push({ updateTextStyle: { range: { startIndex: element.startIndex, endIndex: element.endIndex }, textStyle: { underline: true }, fields: "underline" } });
          Logger.log(i);
          // insertion++; // This is not used.
        }
      });
    }
  });
  Docs.Documents.batchUpdate({requests}, documentId);
}

或者,我认为你也可以修改以下脚本。

function get_all_insertion_deletion() {
  var documentId = "MYDOCUMENTID";
  var doc = Docs.Documents.get(documentId);
  var requests = doc.body.content.flatMap(content => {
    if (content.paragraph) {
      var elements = content.paragraph.elements;
      return elements.flatMap(element => element.textRun.suggestedDeletionIds || element.textRun.suggestedInsertionIds ? { updateTextStyle: { range: { startIndex: element.startIndex, endIndex: element.endIndex }, textStyle: { underline: true }, fields: "underline" } } : []);
    }
    return [];
  });
  Docs.Documents.batchUpdate({requests}, documentId);
}

参考: