次の方法で共有


別のPowerPointプレゼンテーションからスライドを挿入する

PowerPoint アドインは、PowerPointのアプリケーション固有の JavaScript ライブラリを使用して、1 つのプレゼンテーションから現在のプレゼンテーションにスライドを挿入できます。 挿入したスライドがソース プレゼンテーションの書式設定を保持するか、ターゲット プレゼンテーションの書式設定を保持するかを制御できます。

スライド挿入 API は、主にプレゼンテーション テンプレートのシナリオで使用されます。アドインによって挿入できるスライドのプールとして機能する既知のプレゼンテーションが少なからず存在します。 このようなシナリオでは、ユーザーまたは顧客が、選択基準 (スライド タイトルや画像など) とスライド ID を関連付けるデータ ソースを作成して管理する必要があります。 API は、ユーザーが任意のプレゼンテーションからスライドを挿入できるシナリオでも使用できますが、そのシナリオでは、ユーザーは実質的にソース プレゼンテーション からすべての スライドを挿入するように制限されます。 詳細については、「 挿入するスライドの選択 」を参照してください。

1 つのプレゼンテーションから別のプレゼンテーションにスライドを挿入するには、2 つの手順があります。

  1. ソース プレゼンテーション ファイル (.pptx) を Base64 形式の文字列に変換します。
  2. insertSlidesFromBase64 メソッドを使用して、Base64 ファイルから現在のプレゼンテーションに 1 つまたは複数のスライドを挿入します。

ソース プレゼンテーションを Base64 に変換する

ファイルを Base64 に変換する方法は数多くあります。 使用するプログラミング言語とライブラリ、およびアドインのサーバー側で変換するか、クライアント側で変換するかは、シナリオによって決まります。 最も一般的には、 FileReader オブジェクトを使用して、クライアント側で JavaScript で変換を行います。 次の例は、このプラクティスを示しています。

  1. まず、ソース PowerPoint ファイルへの参照を取得します。 この例では、file型の<input> コントロールを使用して、ユーザーにファイルの選択を求めます。 アドイン ページに次のマークアップを追加します。

    <section>
        <p>Select a PowerPoint presentation from which to insert slides</p>
        <form>
            <input type="file" id="file" />
        </form>
    </section>
    

    このマークアップは、次のスクリーンショットの UI をページに追加します。

    「スライドを挿入するPowerPointプレゼンテーションを選択する」という説明文が先行する HTML ファイルの種類の入力コントロール。コントロールは、

    注:

    PowerPointファイルを取得する方法は他にも数多くあります。 たとえば、ファイルが OneDrive または SharePoint に保存されている場合は、Microsoft Graph を使用してダウンロードできます。 詳細については、「Microsoft Graph でのファイルの操作」および「Microsoft Graph を使用してファイルにアクセスする」を参照してください。

  2. 次のコードをアドインの JavaScript に追加して、入力コントロールの change イベントに関数を割り当てます。 (次の手順で storeFileAsBase64 関数を作成します)。

    $("#file").on("change", storeFileAsBase64);
    
  3. 次のコードを追加します。 このコードについては、次の点に注意してください。

    • reader.readAsDataURL メソッドは、ファイルを Base64 に変換し、reader.result プロパティに格納します。 メソッドが完了すると、 onload イベント ハンドラーがトリガーされます。
    • onload イベント ハンドラーは、エンコードされたファイルからメタデータをトリミングし、エンコードされた文字列をグローバル変数に格納します。
    • Base64 でエンコードされた文字列は、後の手順で作成した別の関数によって読み取られるので、グローバルに格納されます。
    let chosenFileBase64;
    
    async function storeFileAsBase64() {
        const reader = new FileReader();
    
        reader.onload = async (event) => {
            const startIndex = reader.result.toString().indexOf("base64,");
            const copyBase64 = reader.result.toString().substr(startIndex + 7);
    
            chosenFileBase64 = copyBase64;
        };
    
        const myFile = document.getElementById("file") as HTMLInputElement;
        reader.readAsDataURL(myFile.files[0]);
    }
    

insertSlidesFromBase64 を使用してスライドを挿入する

アドインは、 Presentation.insertSlidesFromBase64 メソッドを使用して、別のPowerPointプレゼンテーションのスライドを現在のプレゼンテーションに挿入します。 次の簡単な例では、ソース プレゼンテーションのすべてのスライドが現在のプレゼンテーションの先頭に挿入され、挿入されたスライドはソース ファイルの書式設定を保持します。 chosenFileBase64は、PowerPointプレゼンテーション ファイルの Base64 でエンコードされたバージョンを保持するグローバル変数であることに注意してください。

async function insertAllSlides() {
  await PowerPoint.run(async function(context) {
    context.presentation.insertSlidesFromBase64(chosenFileBase64);
    await context.sync();
  });
}

InsertSlideOptions オブジェクトを 2 番目のパラメーターとして渡して、スライドを挿入する場所や、ソースまたはターゲットの書式設定を取得するかどうかなど、挿入結果の一部の側面を制御insertSlidesFromBase64。 次に例を示します。 このコードについては、以下の点に注意してください。

  • formatting プロパティには、"UseDestinationTheme" と "KeepSourceFormatting" の 2 つの値があります。 必要に応じて、 InsertSlideFormatting 列挙型 (たとえば、 PowerPoint.InsertSlideFormatting.useDestinationTheme) を使用できます。
  • 関数は、 targetSlideId プロパティで指定されたスライドの直後に、ソース プレゼンテーションからスライドを挿入します。 このプロパティの値はnnn、#、#mmmmmmmmm、または nnn#mmmmmmmmmmm のいずれかの文字列です。nnn はスライドの ID (通常は 3 桁) で、mmmmmmm はスライドの作成 ID (通常は 9 桁) です。 例としては、 267#763315295267##763315295などがあります。
async function insertSlidesDestinationFormatting() {
  await PowerPoint.run(async function(context) {
    const insertSlideOptions: PowerPoint.InsertSlideOptions = {
                                formatting: "UseDestinationTheme",
                                targetSlideId: "267#"
    };
    context.presentation.insertSlidesFromBase64(chosenFileBase64, insertSlideOptions);
    await context.sync();
  });
}

もちろん、通常、コーディング時にターゲット スライドの ID または作成 ID はわかりません。 より一般的には、アドインはユーザーにターゲット スライドの選択を求めます。 次の手順では、現在選択されているスライドの nnn# ID を取得し、ターゲット スライドとして使用する方法を示します。

  1. Common JavaScript API の Office.context.document.getSelectedDataAsync メソッドを使用して、現在選択されているスライドの ID を取得する関数を作成します。 次に例を示します。 getSelectedDataAsyncの呼び出しは Promise を返す関数に埋め込まれている点に注意してください。 これを行う理由と方法の詳細については、「 promise-returning 関数で Common-APIs をラップする」を参照してください。

    function getSelectedSlideID() {
      return new OfficeExtension.Promise<string>(function (resolve, reject) {
        Office.context.document.getSelectedDataAsync(Office.CoercionType.SlideRange, function (asyncResult) {
          try {
            if (asyncResult.status === Office.AsyncResultStatus.Failed) {
              reject(console.error(asyncResult.error.message));
            } else {
              resolve(asyncResult.value.slides[0].id);
            }
          }
          catch (error) {
            reject(console.log(error));
          }
        });
      })
    }
    
  2. main 関数の PowerPoint.run() 内で新しい関数を呼び出し、返される ID ("#" 記号と連結) を、InsertSlideOptions パラメーターの targetSlideId プロパティの値として渡します。 次に例を示します。

    async function insertAfterSelectedSlide() {
        await PowerPoint.run(async function(context) {
    
            const selectedSlideID = await getSelectedSlideID();
            const insertSlideOptions: PowerPoint.InsertSlideOptions = {
                formatting: "UseDestinationTheme",
                targetSlideId: selectedSlideID + "#"
            };
    
            context.presentation.insertSlidesFromBase64(chosenFileBase64, insertSlideOptions);
    
            await context.sync();
        });
    }
    

挿入するスライドの選択

InsertSlideOptions パラメーターを使用して、挿入するソース プレゼンテーションのスライドを制御することもできます。 これを行うには、ソース プレゼンテーションのスライド ID の配列を sourceSlideIds プロパティに割り当てます。 次に、4 つのスライドを挿入する例を示します。 配列内の各文字列は、 targetSlideId プロパティに使用されるパターンの 1 つまたは複数に従う必要があることに注意してください。

async function insertAfterSelectedSlide() {
    await PowerPoint.run(async function(context) {
        const selectedSlideID = await getSelectedSlideID();
        const insertSlideOptions: PowerPoint.InsertSlideOptions = {
            formatting: "UseDestinationTheme",
            targetSlideId: selectedSlideID + "#",
            sourceSlideIds: ["267#763315295", "256#", "#926310875", "1270#"]
        };
        context.presentation.insertSlidesFromBase64(chosenFileBase64, insertSlideOptions);

        await context.sync();
    });
}

注:

スライドは、配列に表示される順序に関係なく、ソース プレゼンテーションに表示される相対順序と同じ順序で挿入されます。

ユーザーがソース プレゼンテーションでスライドの ID または作成 ID を検出できる実用的な方法はありません。 このため、コーディング時にソース ID がわかっている場合、またはアドインが実行時に一部のデータ ソースからそれらを取得できる場合にのみ、 sourceSlideIds プロパティを使用できます。 ユーザーがスライド ID を記憶することは想定できないため、ユーザーがスライド (タイトルまたはイメージなど) を選択し、各タイトルまたは画像をスライドの ID に関連付ける方法も必要です。

したがって、 sourceSlideIds プロパティは主にプレゼンテーション テンプレートのシナリオで使用されます。アドインは、挿入可能なスライドのプールとして機能する特定のプレゼンテーション セットで動作するように設計されています。 このようなシナリオでは、ユーザーまたは顧客が、選択基準 (タイトルや画像など) を、一連の可能なソース プレゼンテーションから作成されたスライド ID またはスライド作成 ID に関連付けるデータ ソースを作成および管理する必要があります。

試してみる

Script Lab アドインを使用して、次の対話型サンプルを試してください。

  • 他のプレゼンテーションからスライドを挿入する

Script Lab の詳細については、「Script Lab を使用して Office JavaScript API を探索する」を参照してください。