【问题标题】:How to erase all parts from google doc after specific text using google api scripts?如何使用谷歌 api 脚本在特定文本后从谷歌文档中删除所有部分?
【发布时间】:2019-08-25 07:10:27
【问题描述】:

问题是在某些特定文本(在我的情况下为“#PLACEHOLDER#”)之后删除所有内容段落、图像、表格或任何内容。我需要遍历所有内容还是可以在获得范围位置后清除所有内容?

var body = somedoc.getBody();
var range = body.findText("#PLACEHOLDER#");
var ele = range.getElement();
if (ele.getParent().getParent().getType() === DocumentApp.ElementType.BODY_SECTION) {
  var offset = body.getChildIndex(ele.getParent());

}

我可以添加类似body.delteText(offset + 1)body.setText('',offset + 1)的内容吗?

【问题讨论】:

    标签: google-apps-script google-docs google-docs-api


    【解决方案1】:
    • 您想删除 Google 文档中 #PLACEHOLDER# 段落之后正文中的所有子项。
    • 您希望使用 Google Apps 脚本实现此目的。

    如果我的理解是正确的,那么这个修改呢?请认为这只是几个答案之一。

    模式一:

    在这个模式中,使用了文档服务。

    修改脚本:

    请进行如下修改。本次修改,修改了if语句中的脚本。

    从:
    var offset = body.getChildIndex(ele.getParent());
    
    到:
    var offset = body.getChildIndex(ele.getParent());
    
    // Retrieve total number of children in the body.
    var numChildren = body.getNumChildren();
    
    // If the text of the last paragraph is cleared.
    body.getChild(numChildren - 1).asParagraph().editAsText().setText("");
    
    // The children from offset to the child before the last paragraph are removed.
    for (var i = numChildren - 2; i > offset; i--) {
      body.removeChild(body.getChild(i));
    }
    
    • 在这种情况下,#PLACEHOLDER# 的段落不会被删除。如果还想去掉#PLACEHOLDER#这一段,请修改如下。
      • 发件人:for (var i = numChildren - 2; i > offset; i--) {
      • 收件人:for (var i = numChildren - 2; i >= offset; i--) {

    模式 2:

    在此模式中,使用了 Google Docs API。当您使用此脚本时,please enable Docs API at Advanced Google services。在这种情况下,使用来自body.findText("#PLACEHOLDER#") 的结果,不使用用于删除子项的 for 循环。

    修改脚本:

    请进行如下修改。本次修改,修改了if语句中的脚本。

    从:
    var offset = body.getChildIndex(ele.getParent());
    
    到:
    var offset = body.getChildIndex(ele.getParent());
    
    // Retrieve document.
    var content = Docs.Documents.get(somedoc.getId()).body.content;
    
    // Create request body.
    var startIndex = content[offset + 1].paragraph.elements[0].endIndex;
    var endIndex = content[content.length - 1].paragraph.elements[0].endIndex - 1;
    var resource = {requests: [{deleteContentRange: {range: {startIndex: startIndex, endIndex: endIndex}}}]};
    
    // Update document.
    Docs.Documents.batchUpdate(resource, somedoc.getId());
    
    • 在这种情况下,#PLACEHOLDER# 的段落不会被删除。如果还想去掉#PLACEHOLDER#这一段,请修改如下。
      • 发件人:content[offset + 1].paragraph.elements[0].endIndex
      • 收件人:content[offset].paragraph.elements[0].endIndex

    参考资料:

    如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多