3

Office アドイン テクノロジを使用して、Word ドキュメントに Model-View-Controller ロジックを追加したいと考えています。

私のシナリオでは、ユーザーは新しい Word ドキュメントを作成し、アドインをアクティブにし、アドイン内のボタンを押してドキュメントにテキスト ボックス フィールドを追加できる必要があります。フィールドには、データベースからの番号が表示されます。ユーザーがその番号を更新して保存を押すと、番号がデータベースに書き戻されます。次に Word ドキュメントを開いたときに、更新された値を表示するために、数値を更新する必要があります。

私が知りたいのは、アドイン テクノロジを使用できるかどうか (おそらくバインディング サポート付きでしょうか?)、またはまだ実験段階にあることです。テキストボックスを単純に表すコンパクトな OOXML を構築する最善の方法を理解するのに苦労しています: メソッド getSelectedDataAsync は非常に複雑なドキュメントを出力します。ネイキッドテキストボックスフィールド!また、バインディングをカスタム XML に設定する方法は? その XML はどこに配置する必要がありますか? 書類の中に?Microsoft によって GitHub で提供されているサンプルを見ましたが、多くの場合、必要なデータとフィールドが既にある既存の Word ドキュメントに基づいているため、あまり明確ではありません。

4

1 に答える 1

2

絶対!あなたが説明するシナリオは、実際には、プラットフォームが最初に設計された主要な種類のアドインの 1 つです。重要な要素は、ドキュメント内のコンテンツ コントロールを追跡する「バインディング」と呼ばれる JavaScript オブジェクトであり、OXML やカスタム XML は必要ありません。

API は、コンテンツ コントロール (テキスト ボックスと同様) を直接追加できます。Bindings.addFromSelectionAsyncメソッドを呼び出します。

function addNewField(fieldName){
    Office.context.document.bindings.addFromSelectionAsync("text",
    { id: fieldName },
    function (asyncResult){
        displayNumberFromDatabase(asyncResult.value);
    }
}

また、2 つのイベント ハンドラーを登録して、ユーザーがこれらのコンテンツ コントロール内のテキストを選択または変更したときに通知を受け取るようにします。この場合の関連イベントは、それぞれBindingSelectionChangedBindingDataChangedです。

Office.context.document.addHandlerAsync("bindingDataChanged", whenBindingDataChanged);
Office.context.document.addHandlerAsync("bindingSelectionChanged", whenBindingSelected);

これらのイベントがトリガーされると、コンテンツを読みたくなるでしょう。これはBinding.getDataAsyncメソッドで行うことができます。

function whenBindingDataChanged(eventArgs){
    eventArgs.binding.getDataAsync(function(asyncResult){
        setValueToDatabaseAsync(eventArgs.binding.id,asyncResult.value);
        // you need to implement setValueToDatabaseAsync
    });
}

最後に、Binding の内容を自分で変更して初期値を書き込むには、Binding.setDataAsyncメソッドを使用します。

function displayNumberFromDatabase(myBinding){
    getValueFromDatabaseAsync(myBinding.id, function(value){
        myBinding.setDataAsync(value);
    });
    // you need to implement getValueFromDatabaseAsync
}

-Michael Saunders 氏、Office アドイン担当 PM

于 2016-08-24T17:20:40.463 に答える