2

Office、MS Word 2016、VisualStudio 2015 用の JavaScript API を使用して開発しています。ドキュメント内に同じタイトルのリッチ テキスト ContentContols が複数あります。onBindingDataChanged 通知を取得できるように、これらの ContentControls をハンドラーにバインドしようとしています。

ContentControls を独自の ID を持つ 1 つのハンドラーにバインドする方法はありますか? または ContentControls の ID を 1 つのパラメーターとして渡しますか?

私の現在のコードは次のようなものです:

function bindNamedItem() {

    Office.context.document.bindings.addFromNamedItemAsync("CCTitle", Office.BindingType.Text, { id: 'ccbind' }, function (result) {
        if (result.status == 'succeeded') {
            console.log('Added new binding with type: ' + result.value.type + ' and id: ' + result.value.id);
        }
        else
            console.log('Error: ' + result.error.message);
    });

}
 function addEventHandlerToBinding() {
    Office.select("bindings#ccbind").addHandlerAsync(Office.EventType.BindingDataChanged, onBindingDataChanged);
}

 var onBindingDataChanged = function (result) {
        console.log(result);     
    }

タイトルが「CCTitle」のドキュメントには複数のコンテンツ コントロールがあるためaddFromNamedItemAsync、関数内でbindNamedItemエラーが発生します。Multiple objects with the same name were found.

私が達成しようとしているのは、ユーザーがそれらのいずれかに何らかの変更を加えるたびに、ContentControls の ID とコンテンツを取得することです。役立つアイデアはありますか?前もって感謝します。

4

1 に答える 1

0

お気づきのとおり、コンテンツ コントロールの名前付けにより、名前に基づいてバインドできなくなります。ただし、すべてのコンテンツ コントロールにバインドするために使用できる回避策があります。

  1. 最初にDocument .contentControls を取得します。これは、 ContentControlCollectionと呼ばれるドキュメント内のすべてのコンテンツ コントロールの配列を返します。
  2. 配列内の各要素はContentControl オブジェクトです。ContentControl ごとに手順 3 ~ 6 を順番に実行します。
  3. contentControl.title で ContentControl の名前を確認します。探している名前 (CCTitle) と一致する場合は、次の手順に進みます。それ以外の場合は、次の ContentControl のためにステップ 3 に戻ります。
  4. デフォルトのパラメーターを指定して ContentControl のselect() メソッドを呼び出し、word に選択させます。
  5. ContentControl が選択されたという確認をコールバックで受け取ったら、Text bindingType でBindings.addFromSelectionAsync()を呼び出します。
  6. Bindingが正常に作成されたという確認をコールバックで受け取ったら、 BindingDataChanged EventTypeを指定してBinding.addHandlerAsyncを呼び出します。必要に応じて、これらすべてのバインディングに同じハンドラー関数を使用できます。

この回避策の欠点の 1 つは、チェーン化された非同期呼び出しが多数あるため、パフォーマンスが期待どおりに速くならない可能性があることです。結果として、ユーザーの混乱を避けるために、この操作を何らかのユーザー アクションに関連付けるか、タスク ペインに読み込み UI を追加することをお勧めします。

-Michael (Office アドイン担当 PM)

于 2016-04-25T18:30:00.047 に答える