Google Apps Script - Как получить текст из абзаца? - PullRequest
0 голосов
/ 25 октября 2018

Попытка написать функцию, которая вытягивает текст в скобках <> в документе, записывает в html и позволяет пользователю заменить текст в квадратных скобках полем ввода пользователя (через функцию поиска и замены).Возникли проблемы с получением текста в скобках из документа Google.Самое близкое, что я получил, - это вернуть абзац, в котором находится текст в квадратных скобках, но это не работает, потому что тогда весь абзац заменяется вместо текста в квадратных скобках.

Это самая последняя ошибка:

TypeError: Невозможно найти функцию getStartOffset в объекте Text.(строка 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 голосов
/ 26 октября 2018

Попробуйте это:

Это всего лишь небольшой пример, который поможет вам преодолеть текущую проблему.

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);
}

Я думаю, что ваша единственная проблема состояла в том, что вам нужен .*, что означает ноль или более любого символа.Шаблон поиска - это регулярное выражение, заключенное в кавычки.Надеюсь, это поможет.

...