Получить все идентификаторы закладок из документа Word - PullRequest
0 голосов
/ 08 мая 2020

Я хочу отсканировать весь документ, содержащий текст со стилями «Заголовок 1», «Заголовок 2», обычный текст и несколько маркированных пунктов / другой текст (который в основном представляет собой технический отчет). После сканирования я хочу извлечь закладки, назначенные элементам «Заголовок 2», которые также действуют как заголовки подзаголовков в отчете.

getBookmarks() определяется в API предварительного просмотра / бета-версии, который работает, если установлен мой курсор в элементе «Заголовок 2», как показано ниже:

async function getBookmarks() {
  Word.run(function(context) {        
    var range = context.document.getSelection();
    var bkmrk = range.getBookmarks(true, true);

    return context.sync().then(function() {
      console.log("The bookmarks read from the document was: " + bkmrk.value);
    });
  }).catch(function(error) {
    console.log("Error: " + JSON.stringify(error));
    if (error instanceof OfficeExtension.Error) {
      console.log("Debug info: " + JSON.stringify(error.debugInfo));
    }
  });
}

Мне удалось отсканировать весь документ и получить атрибут «style», как видно из примера кода в документации API:

async function getParagraphAll() {   await Word.run(async (context) => {
    // Gets the complete sentence (as range) associated with the insertion point.
    let paragraphs = context.document.body.paragraphs
    paragraphs.load("text, style");

    await context.sync();

    // Expands the range to the end of the paragraph to get all the complete sentences.
    let completeParagraph = paragraphs.items[0]
      .getRange()
      .expandTo(
        context.document
          .getSelection()
          .paragraphs.getFirst()
          .getRange("End")
      )

    paragraphs.load("text, style, hyperlink");
    await context.sync();

    for (let i = 0; i < paragraphs.items.length; i++) {
      console.log(paragraphs.items[i].style);
      //let range = paragraphs.items[i].getRange()   - Why is this not working ?
      //let bkmrk = range.getBookmarks(true, false)  - This doesnt get me the bookmark while its in 
      //the loop scanning the entire document. Is it because it fails on "Normal" style? 
      // Should I filter out "Normal" and only run "getBookmarks" on "Heading" style ?
      console.log(paragraphs.items[i].style);
    }   }); }

Я сделал ссылку на библиотеки, доступные в ссылке на предварительный просмотр API: https://appsforoffice.microsoft.com/lib/beta/hosted/office.js

Я изо всех сил пытаюсь понять, почему я могу получить закладка на уровне курсора, но когда я хочу получить ее для всего документа, она просто отображает

do context.syn c () перед загрузкой любого свойства. Нет необходимости в нагрузке.

...