PowerPoint アドイン

PowerPoint のアドインを使って、Windows、iOS、Office Online、Mac などのプラットフォームでユーザーのプレゼンテーションのための魅力的なソリューションをビルドすることができます。アドインの 2 種類のうちいずれかを作成できます:

  • コンテンツ アドインを使うと、プレゼンテーションに HTML5 の動的コンテンツが追加されます。たとえば PowerPoint のための LucidChart ダイアグラム アドインでは、これを使って LucidChart からデッキにインタラクティブな図を挿入することができます。
  • 作業ウィンドウ アドインを使えば、サービスを介して、参照情報を取り込んだり、スライドにデータを挿入したりすることができます。たとえば Shutterstock イメージ アドインでは、これを使ってプロの写真をプレゼンテーションに追加することができます。

PowerPoint アドインのシナリオ

この記事で紹介するコード例では、PowerPoint のコンテンツ アドインの開発のための基本的なタスクをいくつか示します。

情報を表示するために、これらの例は app.showNotification 関数に依存しています。これは、Visual Studio の Office アドイン プロジェクト テンプレートに含まれています。アドインを開発するのに Visual Studio を使用していない場合は、showNotification 関数を独自のコードに置き換える必要があります。これらの例のうちいくつかは、これらの関数 var globals = {activeViewHandler:0, firstSlideId:0}; の範囲外で宣言されたこの globals オブジェクトにも依存しています。

これらのコード例では、プロジェクトが Office.js v1.1 以降のライブラリを参照している必要があります。

プレゼンテーションのアクティブ ビューの検出と ActiveViewChanged イベントの処理を行う

コンテンツ アドインをビルドする場合は、プレゼンテーションのアクティブ ビューを取得して、Office.Initialize ハンドラーの一部として、ActiveViewChanged イベントを処理する必要があります。

  • getActiveFileView 関数は Document.getActiveViewAsync メソッドを呼び出して、プレゼンテーションの現在のビューが "編集" ビュー ([標準][アウトライン表示] などの、スライドを編集できるビュー) なのか "読み取り" ビュー ([スライド ショー][閲覧表示]) なのかを返します。

  • registerActiveViewChanged 関数は、Document.ActiveViewChanged イベントのハンドラーを登録するための addHandlerAsync メソッドを呼び出します。

注意

PowerPoint Online では Document.ActiveViewChanged イベントは、スライド ショー モードが新しいセッションとして扱われるようには起動しません。この場合、下に示すように、アドインで読み込むアクティブ ビューをフェッチしなければなりません。

//general Office.initialize function. Fires on load of the add-in.
Office.initialize = function(){

    //Gets whether the current view is edit or read.
    var currentView = getActiveFileView();

    //register for the active view changed handler
    registerActiveViewChanged();

    //render the content based off of the currentView
    //....
}

function getActiveFileView()
{
    Office.context.document.getActiveViewAsync(function (asyncResult) {
        if (asyncResult.status == "failed") {
            app.showNotification("Action failed with error: " + asyncResult.error.message);
        }
        else {
            app.showNotification(asyncResult.value);
        }
    });

}

function registerActiveViewChanged() {
    Globals.activeViewHandler = function (args) {
        app.showNotification(JSON.stringify(args));
    }

    Office.context.document.addHandlerAsync(Office.EventType.ActiveViewChanged, Globals.activeViewHandler, 
        function (asyncResult) {
            if (asyncResult.status == "failed") {
           app.showNotification("Action failed with error: " + asyncResult.error.message);
        }
            else {
            app.showNotification(asyncResult.status);
            }
        });
}

getSelectedRange 関数は Document.getSelectedDataAsync メソッドを呼び出して、asyncResult.value から返される JSON オブジェクトを取得します。そのオブジェクトには、選択範囲のスライド (または現在のスライドのみ) の ID、タイトル、インデックスが入った "slides" という名前の配列が含まれています。この関数はまた、選択範囲の最初のスライドの ID をグローバル変数に保存します。

function getSelectedRange() {
    // Get the id, title, and index of the current slide (or selected slides) and store the first slide id */
    Globals.firstSlideId = 0;

    Office.context.document.getSelectedDataAsync(Office.CoercionType.SlideRange, function (asyncResult) {
        if (asyncResult.status == "failed") {
            app.showNotification("Action failed with error: " + asyncResult.error.message);
        }
        else {
            Globals.firstSlideId = asyncResult.value.slides[0].id;
            app.showNotification(JSON.stringify(asyncResult.value));
        }
    });
}

goToFirstSlide 関数は Document.goToByIdAsync メソッドを呼び出して、上記の getSelectedRange 関数が格納した最初のスライドの ID に移動します。

function goToFirstSlide() {
    Office.context.document.goToByIdAsync(Globals.firstSlideId, Office.GoToType.Slide, function (asyncResult) {
        if (asyncResult.status == "failed") {
            app.showNotification("Action failed with error: " + asyncResult.error.message);
        }
        else {
            app.showNotification("Navigation successful");
        }
    });
}

goToSlideByIndex 関数は Document.goToByIdAsync メソッドを呼び出して、プレゼンテーションの次のスライドに移動します。

function goToSlideByIndex() {
    var goToFirst = Office.Index.First;
    var goToLast = Office.Index.Last;
    var goToPrevious = Office.Index.Previous;
    var goToNext = Office.Index.Next;

    Office.context.document.goToByIdAsync(goToNext, Office.GoToType.Index, function (asyncResult) {
        if (asyncResult.status == "failed") {
            app.showNotification("Action failed with error: " + asyncResult.error.message);
        }
        else {
            app.showNotification("Navigation successful");
        }
    });
}

プレゼンテーションの URL を取得する

getFileUrl 関数は Document.getFileProperties メソッドを呼び出して、プレゼンテーション ファイルの URL を取得します。

function getFileUrl() {
    //Get the URL of the current file.
    Office.context.document.getFilePropertiesAsync(function (asyncResult) {
        var fileUrl = asyncResult.value.url;
        if (fileUrl == "") {
            app.showNotification("The file hasn't been saved yet. Save the file and try again");
        }
        else {
            app.showNotification(fileUrl);
        }
    });
}

関連項目