2017-05-11 34 views
0

如何列出标题(标题1,标题2等),找到一个特定的(按名称)一个并在那里插入一个段落?它在新的Word JS API中可行吗?单词地址:如何查找标题并在其中插入文本?

更新。谢谢里克!这里粘贴代码其中的伎俩

await Word.run(async (context) => { 
     try { 
      let paragraphs = context.document.body.paragraphs; 
      context.load(paragraphs, ['items']); 

      // Synchronize the document state by executing the queued commands 
      await context.sync(); 

      let listItems: HeroListItem[] = []; 
      for (let i = 0; i < paragraphs.items.length; ++i) { 
       let item = paragraphs.items[i]; 

       context.load(item, ['text', 'style', 'styleBuiltIn']); 

       // Synchronize the document state by executing the queued commands 
       await context.sync(); 

       if (item.style === 'Heading 1' || item.style === 'Heading 2') { 
        listItems.push({ 
         primaryText: item.text + ' (' + item.style + ')' 
        }); 

        if (item.text === 'Late days') { 
         let newLineItem = item.getNextOrNullObject(); 
         context.load(item, ['text', 'style', 'styleBuiltIn']); 
         newLineItem.insertParagraph('<<<<<<<<<<<<<<My inserted text>>>>>>>>>>>>>>', 'After'); 
        } 
       } 
      } 

      this.setState({listItems: listItems}); 
     } catch (error) { 
      this.setState({listItems: [{primaryText: 'error:' + error}]}); 
     } 
    }); 

回答

0

我认为当你说“名字”你的意思是标题的文本。 这可以做到。你的代码应该加载所有的段落。遍历它们并使用风格styleBuiltIn属性来查找样式名称以“标题”开头的样式。然后遍历那些查看文本属性的人以找到您想要的人。然后使用insertParagraph方法插入新段落。

更新:(响应OP的问题):你应该总是最小化呼叫context.sync,所以你应该尽量避免在循环中调用它。尝试使用for循环将每个段落添加到数组,然后context.load该数组并执行context.sync。然后遍历数组并进行风格和文本检查。顺便说一句,在你添加到你的问题的代码中,你的第三个电话context.load是不必要的。您也可以删除你的context.load秒呼叫,前提是你改写context.load第一个电话为:

context.load(paragraphs, ['text', 'style']); 

而且,您的代码不使用styleBuiltIn,这样你就可以删除所有引用。

+0

谢谢瑞克!题外话题 - 我应该为数组中的每个元素逐个执行context.sync(),还是应该先加载所有需要的元素,然后再执行一次context.sync? – ZakiMa

相关问题