ホスト固有の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。
addFromPromptAsync()からのバインディングでこれと同じことを実行できますか?私はそのデータバインディングメソッドでこれを再現するのが難しいです。生成されるバインディングはOffice.BindingType.Text型であり、getRange()などのメソッドへのアクセス権を持っていないようです。 – codex
@コーデック、上記の「更新」をご覧ください –