0
      Office.context.document.bindings.getAllAsync((result: Office.AsyncResult) => {    
           if (result.status == Office.AsyncResultStatus.Succeeded) { 
            for (let attBinding of result.value) { 
             var binding = attBinding as Office.Binding; 
            } 
           } 
          }) 

選択されたテキストの記憶域を持つOfficeアプリケーションを開発しています。選択したすべてのテキストをバインディングリストに保存します。しかし、文書全体で範囲選択されたテキストでソートされたリストが必要です。しかし、関数getAllAsync()は、bingingsのランダムなリストを返します...Office.Binding - 単語の文書(角)内の階層別バインディングを並べ替えます

このバインディングをドキュメント内でどのようにソートできますか?例えば

:(第一選択)

テキスト1

(選択された第三の) テキスト3(選択された第二の)テキスト2 -

、我々のようなソートされたリストが必要です

  1. テキスト1

  2. テキスト2

  3. テキスト3

ないランダムなリスト!

+0

可能ですか? – Marcin

+0

こんにちは!興味深い質問、私はいくつかの明確化が必要です。 1)階層の意味は?あなたはバインディングが文書の読書順にある順序を参照していますか? (上から下へ)2.あなたがあなたの例で3つの束縛を持っているので、「束縛リストのすべての選択されたテキストを保存する」ことを理解していませんか?ただ一つの拘束?あなたの質問は、読書の順序で選択範囲内のバインディングを取得することですか?私はより良い指針を与えることができるように明確にしてください。ありがとう! –

+0

- "バインディングがドキュメントの読み上げ順序にある​​順序を参照していますか?" - はい、上 - >下。 - "あなたの例では3つのバインディングがある" - >はい、3つのバインディング(Office.Bindingの3つのオブジェクト)があります。 バインディングがドキュメントの読み取り順にあるすべてのバインディングのリストが必要です - それは可能ですか? – Marcin

答えて

0

はい、できます。ここでの重要な点は、バインディングを作成すると効果的にドキュメントにコンテンツコントロールを追加することです。そのためには、ドキュメントの選択または本文に適用されたcontentControlsコレクションを使用して、読書の順序。 (あなたが選択したもの、またはすべての文書に必要な場合は、あなたの質問からはっきりしないが、私は両方を説明する)。サンプル前

今、いくつかの明確化:

  1. 実際、bindings.getAllAsync()メソッドは、いずれかのランダム読み取り順序と一致しますが、そのことはありません。あなたのシナリオでは役に立たないと思われる作成順序でバインディングを実際に返します。
  2. 一方、コレクション(範囲はドキュメントの選択または本文になります)は、範囲内のすべてのコンテンツコントロールをドキュメントの読み取り順に取得します。このコレクションには、バインドの有無にかかわらずコンテンツコントロールが含まれます。そのため、バインディングを作成する際に、後でそれらを認識できるようにする必要があります。これは簡単です。新しいAPIでは、コンテンツコントロールを挿入してタイトルを設定することができますbindings.addFromNamedItemAsyncメソッドを使用して、タイトルを使用してバインディングを作成します。コンテンツコントロールのタグを設定して、ソリューションのコンテキストでこれがバインディングを表すことを識別することもできます。ここで

あなたがコンテンツコントロールを作成し、それらへの結合を追加し、読み順にバインディングを横断するcontentControlsコレクションを使用する方法を示す他のことができる方法の例です。

の作成バインディング:

function insertContentControlWithBinding() { 
 
    Word.run(function (context) { 
 
     //first we insertTheContentCOntrol on the selection, then set the title and tags and finally create the binding. 
 
     var myContentControl = context.document.getSelection().insertContentControl(); 
 
     context.load(myContentControl); 
 
     return context.sync() 
 
      .then(function() { 
 
       myContentControl.title = "identifier"; //this will be used later to create the binding. 
 
       myContentControl.tag = "BOUND"; //used to mark as a bound content control. 
 
       return context.sync() 
 
        .then(function (context) { 
 
         Office.context.document.bindings.addFromNamedItemAsync("identifier", Office.BindingType.Text, {}, function (result) { 
 
          if (result.status = Office.AsyncResultStatus.Succeeded) { 
 
           console.log("binding Created succesfully") 
 
          } 
 
         }) 
 

 
        })  
 
      }) 
 

 
    }).catch(function (e) { 
 
     console.log(e.message); 
 
    }) 
 
}

読み込み順序でバインドを取得する:これは本当にあなたの質問に対する一番下の答えですが、何が起こっているのかについての良い説明が役に立つと思いました。忍耐のおかげで!

function getBindingsinReadingOrder() { 
 
    Word.run(function (context) { 
 
     var myContentControls = context.document.body.contentControls; 
 
     context.load(myContentControls); 
 
     return context.sync() 
 
      .then(function() { 
 
       // lets traverse the content controls and checl which ones are bound by checking the tag. 
 
       for (var i = 0; i < myContentControls.items.length; i++) { 
 
        if (myContentControls.items[i].tag == "BOUND") { 
 
         //its a binding! lets print the content 
 
         console.log(myContentControls.items[i].text); 
 
        } 
 
        else { 
 
         console.log("not a bound cc"); 
 
        } 
 
       } 
 
      }) 
 
    }).catch(function (e) { 
 
     console.log(e.message); 
 
    }) 
 
}

うまくいけば、これは明快さを追加し、シナリオのブロックを解除。 感謝とハッピーコーディング! Juan。

関連する問題