How to use ranges saved to React state - Microsoft Word javascript API?

我是研究僧i 提交于 2019-12-11 05:22:13

问题


I am using the Microsoft Word Javascript API. I have used the .search() function to retrieve an array of ranges and then have saved them to state.definitions in my App.js React component state. This part works. When I try to print out the state using console.log(JSON.stringify(this.state.definitions)), I see the ranges that I just saved.

In a separate function, I want to retrieve those ranges and highlight them in a new color. This part does not work. I don't get any errors, but I don't see any highlight changes in the document.

Interestingly, if I try to highlight the ranges BEFORE saving them to state, it works. This makes me think that the ranges that I am retrieving from state are not actually the ranges understood by Word.

Any help would be much appreciated.

var flattenedTerms contains an array of range items that were retrieved from Word a few lines above. This code successfully changes the font

          for (var i = 0; i < flattenedTerms.length; i++) {
            console.log('flattenedTerms: ', flattenedTerms[i]);
            flattenedTerms[i].font.color = 'purple';
            flattenedTerms[i].font.highlightColor = 'pink';
            flattenedTerms[i].font.bold = true;
          }

          return context.sync().then(function () {
            return resolve(flattenedTerms);
          })
        })

Now the flattenedTerms array, which contains the range items, has been saved to state.definitions using this.setState. This fails to change the font. All of the console.logs do print.


  highlightDefinedTerms = () => {
    var self = this;
    return Word.run(
      function (context) {
        var definitions = self.state.definitions;
        console.log('Highlighting ', definitions.length, ' terms.');
        for (var i = 0; i < definitions.length; i++) {
          console.log('Highlighting definition: ', JSON.stringify(definitions[i]));
          definitions[i].font.color = 'blue';
          definitions[i].font.highlightColor = 'red';
          definitions[i].font.bold = true;
        }
        return context.sync();
      }
    )
  }


回答1:


You need to pass a first parameter to “Word.run” to specify the object whose context you want to resume.

Word.run(self.state.definitions, function(context) ...)



来源:https://stackoverflow.com/questions/57650272/how-to-use-ranges-saved-to-react-state-microsoft-word-javascript-api

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!