Google apps script 在gDocs中使用gApp脚本将光标移动到Selection和";删除下一行“;

Google apps script 在gDocs中使用gApp脚本将光标移动到Selection和";删除下一行“;,google-apps-script,google-docs,Google Apps Script,Google Docs,我曾尝试使用谷歌应用程序脚本删除谷歌文档标题和正文部分的某些段落。。。但是,如果段落是节中的最后一段,则有一个例外:无法删除文档节中的最后一段 但这正是我想删除的一段 我曾尝试将该段与前一段合并,但可惜没有成功——该段仍然存在 实现此目标的唯一有效方法是手动删除段落,方法是将光标放在前一行的末尾,然后按“前进”删除。这将删除下一行,没有例外等。。。但是,我需要使用apps脚本自动执行此操作,所以我想问的是,是否有一种方法可以搜索脚本中的元素,然后从该点模拟按delete键?这更像是一种黑客行为,

我曾尝试使用谷歌应用程序脚本删除谷歌文档标题和正文部分的某些段落。。。但是,如果段落是节中的最后一段,则有一个例外:无法删除文档节中的最后一段

但这正是我想删除的一段

我曾尝试将该段与前一段合并,但可惜没有成功——该段仍然存在

实现此目标的唯一有效方法是手动删除段落,方法是将光标放在前一行的末尾,然后按“前进”删除。这将删除下一行,没有例外等。。。但是,我需要使用apps脚本自动执行此操作,所以我想问的是,是否有一种方法可以搜索脚本中的元素,然后从该点模拟按delete键?这更像是一种黑客行为,但看不到另一种方法吗

例如:

var foundElement = body.findText("Dialogue");

while (foundElement != null) {
  // Get the text object from the element
  var foundText = foundElement.getElement().asText();

  // Where in the element is the found text?
  var start = foundElement.getStartOffset();
  var end = foundElement.getEndOffsetInclusive();  

 //PSUEDO CODE PRESS FORWARD DELETE TWICE FROM the **end** of the search phrase...
 end.pressdelete(twice)       
}

更新:

我能够通过循环浏览文档中的所有标题来删除标题段落-显然,可以有多个

对话结束后,我仍然无法删除表格中的空段落(截图2)

var p=d.getBody().getParent();
var头=[];
var页脚=[];
//让我们遍历文档中的所有子元素,包括页眉和页脚等。。。
对于(变量i=0;i-1){
headers.push(p.getChild(i).asHeaderSection())
}      
var h=p.getChild(i).asHeaderSection().getText();
}else if(t==DocumentApp.ElementType.FOOTER\u节){
var f=p.getChild(i).asFooterSection().getText();
}
} 
函数cleanHeaders(p){
p、 forEach(函数(h,j,ar){
var para=h.getparations();
第F段(职能(e、i、arr){
var children=e.getNumChildren()
//Logger.log(“::子项::”+子项);
if(儿童<1){
var t=e.getText();
var type=e.getType();
var parent=e.getParent();
var pChildren=parent.getNumChildren();
var childIndex=parent.getChildIndex(e);
//Logger.log(“::元素::“+e+”::编号::“+i+”::类型::“+Type+”::文本::“+t+”::子项::“+Children+”::父项:“+Parent+”::父项子项::“+PCChildren+”::子项索引:“+childIndex”);
对于(var i=0;i
作为
无法删除最后一段的变通方法,您可以插入额外的虚拟段落
样本:

function myFunction() {
  var body = DocumentApp.getActiveDocument().getBody();
  body.appendParagraph('');
  var foundElement = body.findText("TargetText at end of line");
  while (foundElement != null) {
    var foundText = foundElement.getElement().asText();
    var paragraph = foundText.getParent();
    paragraph.removeFromParent();
    foundElement = body.findText("TargetText at end of line");    
  }
}
更新 如果要删除多个部分的最后一段,可以实现
catch..try
语句:

function myFunction() {
  var body = DocumentApp.getActiveDocument().getBody();
  var foundElement = body.findText("TargetText at end of line");
  while (foundElement != null) {
    var foundText = foundElement.getElement().asText();
    var paragraph = foundText.getParent();
    var parent = paragraph.getParent();
    try{
      paragraph.removeFromParent();
    }catch(err){
      body.appendParagraph('');
    }
    foundElement = body.findText("TargetText at end of line");    
  }
}
更新 要删除标题和正文中的
foundElement
后的段落,包括表格,可以使用以下代码:

function myFunction() {
  var body = DocumentApp.getActiveDocument().getBody();
  var foundElement = body.findText("TargetText at end of line");
  while (foundElement != null) {
    var foundText = foundElement.getElement().asText();
    var paragraph = foundText.getParent();
    var nextParagraph = paragraph.getNextSibling();
    var parent = paragraph.getParent();
    if(nextParagraph!= null && nextParagraph.getType()=="PARAGRAPH"){
      try{
        nextParagraph.removeFromParent();
      }catch(err){
        var dummyParagraph = body.appendParagraph('');
        nextParagraph.removeFromParent();
        dummyParagraph.merge();
      }
    }
    foundElement = body.findText("TargetText at end of line", foundElement);    
  }

  var header = DocumentApp.getActiveDocument().getHeader();
  foundElement = header.findText("TargetText at end of line");
  while (foundElement != null) {
    var foundText = foundElement.getElement().asText();
    var paragraph = foundText.getParent();
    var nextParagraph = paragraph.getNextSibling();
    var parent = paragraph.getParent();
    if(nextParagraph!= null && nextParagraph.getType()=="PARAGRAPH"){
      Logger.log(nextParagraph.asText().getText());
      try{
        nextParagraph.removeFromParent();
      }catch(err){
        var dummyParagraph = header.appendParagraph('');
        nextParagraph.removeFromParent();
        dummyParagraph.merge();
      }
    }
    foundElement = header.findText("TargetText at end of line", foundElement);    
  }  
}

谢谢@ziganotschka——但遗憾的是,这并没有解决这个问题,也许我还不够清楚。在谷歌文档中,有很多地方,如果不出现一个异常,说明您无法删除某个部分的最后一段,则无法删除该部分的最后一段。此解决方案无法解决此问题,因此我建议了解决方法。我知道,在这种情况下,您可以通过在每次迭代期间执行try-catch语句来添加空段落来修改解决方法,请参阅我的更新答案。再次感谢@ziganotschka,但是,您的代码实际上删除了“搜索到的”文本以及需要删除的最后一段。那么我想我误解了你的问题。您不想删除包含特定文本的段落,但要删除以下段落?如果包含文本的段落是一节的最后一个音调,该怎么办?那么你想删除下一节的第一段吗?嘿@ziganotschka-再次感谢!你的代码可以工作,但它在我的情况下不起作用,因为我以前删除了一些书签,不知怎的,这让事情变得有点奇怪。。。因此,我们应该把你的答案标记为正确的,就像它在基本情况下一样:)非常感谢。
function myFunction() {
  var body = DocumentApp.getActiveDocument().getBody();
  var foundElement = body.findText("TargetText at end of line");
  while (foundElement != null) {
    var foundText = foundElement.getElement().asText();
    var paragraph = foundText.getParent();
    var nextParagraph = paragraph.getNextSibling();
    var parent = paragraph.getParent();
    if(nextParagraph!= null && nextParagraph.getType()=="PARAGRAPH"){
      try{
        nextParagraph.removeFromParent();
      }catch(err){
        var dummyParagraph = body.appendParagraph('');
        nextParagraph.removeFromParent();
        dummyParagraph.merge();
      }
    }
    foundElement = body.findText("TargetText at end of line", foundElement);    
  }

  var header = DocumentApp.getActiveDocument().getHeader();
  foundElement = header.findText("TargetText at end of line");
  while (foundElement != null) {
    var foundText = foundElement.getElement().asText();
    var paragraph = foundText.getParent();
    var nextParagraph = paragraph.getNextSibling();
    var parent = paragraph.getParent();
    if(nextParagraph!= null && nextParagraph.getType()=="PARAGRAPH"){
      Logger.log(nextParagraph.asText().getText());
      try{
        nextParagraph.removeFromParent();
      }catch(err){
        var dummyParagraph = header.appendParagraph('');
        nextParagraph.removeFromParent();
        dummyParagraph.merge();
      }
    }
    foundElement = header.findText("TargetText at end of line", foundElement);    
  }  
}