2017-06-07 10 views
3

Word Onlineを対象にしていますが、Excel/PPT用のポインタも参考になります。OfficeJSでは、バインディングオブジェクトの範囲を取得できますか?

本質的に、バインディングオブジェクト内のテキストを範囲として扱うことは可能ですか?したがって、それをすべて選択するだけでなく、キャレットを最初/最後に移動することもできます。私はの効果に何かを持っているために、コードを想定した

Office.select(“myBindingID”, function error(){}).getAsRange().select(“End”); 

答えて

1

ホスト固有のOfficeとの違い2016+のAPIの波と「共通」(2013)のAPIがあります。

Excelでは、バインディング(および共通APIセットのすべて)が新しいOMに公開され、OMの他の側面(たとえば、範囲)に接続されます。だから、あなたは絶対にそれを行うことができます:

await Excel.run(async (context) => { 
     let binding = context.workbook.bindings.getItem("TestBinding"); 
     let range = binding.getRange(); 
     range.load("address"); 
     range.select(); 

     await context.sync(); 

     OfficeHelpers.UI.notify("Binding range address is " + range.address); 
    }); 

Wordは、Word固有のAPIには、しかし、バインディングのサポートを提供しないことが表示されます。二重にしたい場合は、「WordApi(Office 2016+)がBindingsをサポートしていますか?」といった別のStackoverflowの質問をしたいと思うかもしれません。

Excelの場合、最近公開されたScript Labツール(https://aka.ms/getscriptlab)を使用して、上記のスニペットの拡張版を実際に5回クリックして試すことができます。 Script Labアドイン(無料)をインストールし、ナビゲーションメニューの「インポート」を選択して、次のGIST URL(https://gist.github.com/Zlatkovsky/7701ceddae360ad3883ca867f3831a6f)を使用するだけです。 more info about importing snippets to Script Labを参照してください。

UPDATE:それは、APIの新しいOffice 2016の波を使用してOffice 2013の方法(addFromPromptAsync)を組み合わせることができるのかどうかについて@コーデックスの質問について

:はいそうです。そのコールを2013コールバックに入れ子にすることができますが、私は個人的にプロミスでラップすることを好みます(コードの上半分を参照)。次に新しいAPIにExcel.runを使用します前):

await new Promise((resolve, reject) => { 
     Office.context.document.bindings.addFromPromptAsync(
      Office.BindingType.Matrix, 
      { id: "TestBinding" }, 
      (result) => { 
       if (result.status === Office.AsyncResultStatus.Succeeded) { 
        resolve(); 
       } else { 
        reject(); 
       } 
      } 
     ) 
    }) 

    await Excel.run(async (context) => { 
     let binding = context.workbook.bindings.getItem("TestBinding"); 
     let range = binding.getRange(); 
     range.load("address"); 
     range.select(); 

     await context.sync(); 

     OfficeHelpers.UI.notify("Binding range address is " + range.address); 
    }); 

あなたはhttps://gist.github.com/Zlatkovsky/24f2297cecea181edcc165c6c0df6da0

PSでスクリプトラボ、上記と同じ命令でそれを試してみることができます:あなたが約束してコールバックをラップに新しいしている場合、に専念章がありますJS/TSとPromises Primer - Office.jsを使用してOfficeアドインをビルドする "(https://leanpub.com/buildingofficeaddins)の帳で、新しいPromiseの作成に関するセクションを含む。免責事項、私はその本の著者です。私は、JS/TS/Promiseのコンセプトを始めることと、本書の「肉」について、Office 2016の波を構成するコアコンセプトについて、読者が多くの価値を見出すと思うAPI。

+0

addFromPromptAsync()からのバインディングでこれと同じことを実行できますか?私はそのデータバインディングメソッドでこれを再現するのが難しいです。生成されるバインディングはOffice.BindingType.Text型であり、getRange()などのメソッドへのアクセス権を持っていないようです。 – codex

+0

@コーデック、上記の「更新」をご覧ください –

関連する問題