Ich habe eine paragraphsArray
von Absatzobjekte. Ich habe keywordRanges
von Indizes einiger Absätze und Schlüsselwörter. Ich versuche, über KeywordRanges zu iterieren und das RangeObject des Schlüsselworts aus dem Absatzobjekt zu erhalten.Suchmethode auf Word Absatzobjekt funktioniert nicht
Aber der Code nicht nach der ersten Iteration mit diesem Fehler: PropertyNotLoaded: The property 'items' is not available. Before reading the property's value, call the load method on the containing object and call "context.sync()" on the associated request context.
-Code als Referenz:
var myObject = {
"2":{
"keywords":["the","which","eye"]
},
"4":{
"keywords":["lorem","ipsum"]
},
"9":{
"keywords":["hellow","world","foo","bar"]
}
},
paragraphsArray = [],
keywordRanges = []
Word.run((context) => {
// Create a proxy object for the document body.
var paragraphs = context.document.body.paragraphs
// Queue a commmand to get the OOXML contents of the body.
context.load(paragraphs, 'text, font, style');
// Synchronize the document state by executing the queued commands,
// and return a promise to indicate task completion.
return context.sync()
.then(() => {
// push paragraph range objects to an array
for (var i = 0; i < paragraphs.items.length; i++) {
paragraphsArray.push(paragraphs.items[i])
}
$.each(myObject, (key, value) => {
$.each(value.keywords, (idx, keyword) => {
// add the paragraph range object for the corresponding keyword to an array
var obj = {range:paragraphsArray[key], keyword:keyword}
keywordRanges.push(obj);
})
})
})
.then(()=>{
if(keywordRanges.length > 0){
$.each(keywordRanges, (idx, obj) =>{
// search keyword in the paragraph range object
// obj.range is Paragraph Range object
var searchKeywordResults = obj.range.search(obj.keyword, { matchWholeWord: true})
context.load(searchKeywordResults, 'text, font')
return context.sync().then(() => {
for (var i = 0; i < searchKeywordResults.items.length; i++) {
console.log(searchKeywordResults.items[i])
}
})
})
}
})
})
Versuchen Sie, mit Ihrem Code zu reproduzieren, bekomme ich Fehler "Unable to Property 'Suche' von undefined oder Null Verweis" welche Art von Ihrem Titel übereinstimmt, aber nicht den Fehler entspricht, die Sie in Ihrer Frage erwähnen. Könnten Sie bitte den Titel und/oder die Fehlerbeschreibung erläutern, und was meinen Sie mit "nach der ersten Iteration"? –
Mit diesem etwas mehr arbeiten. Ich kann ein paar Probleme sehen, die relevant sein könnten. 1. Sie definieren die Obj-Variable mit 'var obj = {Bereich: AbsätzeArray [Schlüssel], Schlüsselwort: Schlüsselwort}, so dass die Eigenschaft, die Sie" Bereich "nennen, tatsächlich ein Wort ist. Absatzobjekt, kein Word.Range-Objekt. 2. Sie rufen context.sync innerhalb einer jeden Schleife auf. Dies ist keine gute Übung. Versuchen Sie, jedes searchKeywordResults einem Array in Ihrer Schleife hinzuzufügen. Außerhalb der Schleife context.load() das gesamte Array. –
3. Diesem Kontext.sync folgt ein then(), was bedeutet, dass Sie bei jeder Iteration der Schleife eine neue Promise-Kette haben. –