Google Apps脚本-如何从段落中获取文本?

时间:2018-10-25 18:33:12

标签: google-apps-script google-docs

尝试编写一个函数,该函数在文档的<>括号之间提取文本,写入html,并允许用户使用用户输入字段(通过find and replace函数)替换括号中的文本。无法从Google文档获取实际的带括号的文本。我得到的最接近的是返回括号内的文本所在的段落,但这不起作用,因为然后整个段落都被替换了,而不仅仅是括号内的文本。

这是最近的错误:

  

TypeError:在对象Text中找不到函数getStartOffset。 (线   11,文件“代码”,项目“查找和替换脚本”)

function doGet() {

  var docURL = DocumentApp.openByUrl('XXXX')
  var body = docURL.getBody();

  var fel0 = body.findText('<*>')
  var el0 = fel0.getElement(); 
  var startOffset = el0.getStartOffset();
  var endOffset = el0.getEndOffsetInclusive();
  var text = el0.asText().getText()
    if (elements[0].isPartial())
      text = el0.substring(startOffset,endOffset+1);

  var template = HtmlService.createTemplateFromFile('urlinput.html');
  template.el0 = el0;
  return template.evaluate();
}

function findreplace(form){
  var docURL = DocumentApp.openByUrl('XXXX')
  var body = docURL.getBody();
  body.replaceText(body.findText('<*>',fel0).getElement().asText().getText())

}

如何从该body.findText('<*>')对象中获取实际找到的文本?造成这一困难的很大一部分是*括号之间的<>通配符。

1 个答案:

答案 0 :(得分:1)

尝试一下:

这只是一个简短的小例子,可以帮助您克服当前的问题。

function findAndReplace(){
  var doc=DocumentApp.getActiveDocument();
  var body=doc.getBody();
  var rel1=body.findText('<.*>');
  var el1=rel1.getElement();
  var t=el1.asText().getText();
  var x=rel1.getStartOffset();
  var y=rel1.getEndOffsetInclusive();
  var p=rel1.isPartial();
  el1.asText().replaceText('<.*>', 'You\'ve been replaced.');
  //Logger.log('\nt:%s\nx:%s\ny:%s\np:%s',t,x,y,p?'true':'false');
  //var end="is near";
}

这也可以:

function findAndReplace(){
  DocumentApp.getActiveDocument().getBody().replaceText('<.*>', 'You\'ve been replaced.');
}

这是您实际要求的:

和往常一样,我读了一些问题,然后做了我想做的事情。我想您想获取文字。因此,这是另一个简短示例。

function findMyText(){
  var body=DocumentApp.getActiveDocument().getBody();
  var rel=body.findText('<.*>');
  var el=rel.getElement();
  var eltxt=el.asText().getText();
  var txt=eltxt.slice(rel.getStartOffset()+1,rel.getEndOffsetInclusive())
  DocumentApp.getUi().alert(txt);
}
  
    

我认为您唯一的问题是您需要.*,这意味着零个或多个字符。搜索模式是用引号引起来的正则表达式。我希望这会有所帮助。