2017-05-11 8 views
0

머리글을 나열하는 방법 (제목 1, 제목 2 등), 특정 (이름으로) 하나를 찾고 거기에 단락을 삽입 하시겠습니까? 새 Word JS API에서 사용할 수 있습니까?Word Addin : 제목을 찾고 텍스트를 삽입하는 방법은 무엇입니까?

업데이트. 릭 감사합니다! 여기에 트릭을을 수행하는 코드 붙여 넣기 :

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을 수행하십시오. 그런 다음 배열을 반복하고 스타일 및 텍스트 검사를 수행하십시오. BTW, 질문에 추가 한 코드에서 context.load의 세 번째 호출은 필요하지 않습니다. 당신이 그것에 대한 모든 참조를 제거 할 수 있도록

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

는 또한, 코드가, styleBuiltIn를 사용하지 않는 : 당신은 또한 같은 context.load의 첫 번째 통화를 다시 작성할 것을 제공 context.load의 두 번째 전화를 삭제할 수 있습니다.

+0

릭 감사합니다! 주제 이외의 질문 - 배열의 모든 요소에 대해 context.sync()를 하나씩 수행해야합니까? 아니면 필요한 모든 요소를 ​​먼저로드 한 다음 context.sync를 한 번 수행해야합니까? – ZakiMa