rangeElement.getStartOffset () всегда -1 - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь получить положение различных элементов Range в документе Google. Но результат всегда -1.

Что я сделал: я поместил каждый заголовок моего документа в свой собственный rangeElement, так что он имеет свой собственный идентификатор. С этим идентификатором я хочу получить содержимое и позицию позже в другой функции.

var doc = DocumentApp.getActiveDocument();
var paragraphs = doc.getBody().getParagraphs();
for (var i = 0; i < paragraphs.length; i++) {
if (paragraphs[i].getType() == DocumentApp.ElementType.PARAGRAPH) {
    var heading = paragraphs[i].asParagraph().getHeading();
    //get only headings
    if (heading == DocumentApp.ParagraphHeading.HEADING1) {
    var title = paragraphs[i].asParagraph().asText().getText();
    if (title != "") {
        //put every headings into its own range, so it has its own id
        var rangeBuilder = doc.newRange().addElement(paragraphs[i]);
        var id = doc.addNamedRange('toc', rangeBuilder.build()).getId();
        // check offset and text of the rangeElement
        var offset = doc.getNamedRangeById(id).getRange().getRangeElements()[0].getStartOffset();
        var text = doc.getNamedRangeById(id).getRange().getRangeElements()[0].getStartOffset();
    }
}

В этом примере выводом text всегда является правильный заголовок. Таким образом, содержание rangeElement представляется правильным. Но вывод offset всегда равен -1.

Я хочу сделать следующее:

doc.setCursor(doc.newPosition(rangeElement.getElement(), rangeElement.getStartOffset()));

Но это не работает с StartOffset -1.

1 Ответ

0 голосов
/ 17 января 2019

Документация по скриптам приложений гласит: getStartOffset() Gets the position of the start of a partial range within the range element. If the element is a Text element and isPartial() returns true, the offset is the number of characters before the start of the range (that is, the index of the first character in the range); in any other case, this method returns -1.

Справка:

Если вы хотите найти смещение некоторого фрагмента текста во всем тексте документов, попробуйте это.

function findTextOffset(s){
  var s=s || 'Monster';//debug default
  var doc=DocumentApp.getActiveDocument();
  var text=doc.getBody().getText();
  var offset=text.indexOf(s);
  var ui=HtmlService.createHtmlOutput(Utilities.formatString('Find: %s Text: %s Offset: %s',s, text, offset));
  DocumentApp.getUi().showModelessDialog(ui, 'Text Offset');
}
...