Я хочу отсканировать весь документ, содержащий текст со стилями «Заголовок 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 () перед загрузкой любого свойства. Нет необходимости в нагрузке.