次の方法で共有


PowerPointでスライドを追加および削除する

PowerPoint アドインでは、プレゼンテーションにスライドを追加でき、必要に応じて、新しいスライドに使用するスライド マスターとマスターのレイアウトを指定できます。 アドインはスライドを削除することもできます。

スライドを追加するための API は、主に、プレゼンテーションのスライド マスターとレイアウトの ID がコーディング時にわかっているか、実行時にデータ ソースで見つけられるシナリオで使用されます。 このようなシナリオでは、選択基準 (スライド マスターやレイアウトの名前や画像など) とスライド マスターとレイアウトの ID を関連付けるデータ ソースを作成して管理する必要があります。 API は、ユーザーが既定のスライド マスターとマスターの既定のレイアウトを使用するスライドを挿入できるシナリオや、ユーザーが既存のスライドを選択し、同じスライド マスターとレイアウト (ただし、同じコンテンツではない) で新しいスライドを作成できるシナリオでも使用できます。 詳細については、「 使用するスライド マスターとレイアウトの選択 」を参照してください。

SlideCollection.add を使用してスライドを追加する

SlideCollection.add メソッドを使用してスライドを追加します。 プレゼンテーションの既定のスライド マスターを使用するスライドとそのマスターの最初のレイアウトを追加する簡単な例を次に示します。 メソッドは常にプレゼンテーションの最後に新しいスライドを追加します。 次に例を示します。

async function addSlide() {
  await PowerPoint.run(async function(context) {
    context.presentation.slides.add();

    await context.sync();
  });
}

使用するスライド マスターとレイアウトを選択する

AddSlideOptions パラメーターを使用して、新しいスライドに使用するスライド マスターとマスター内のレイアウトを制御します。 次に例を示します。 このコードについては、以下の点に注意してください。

  • AddSlideOptions オブジェクトのプロパティのいずれかまたは両方を含めることができます。
  • 両方のプロパティを使用する場合は、指定したレイアウトが指定されたマスターに属している必要があります。またはエラーがスローされます。
  • masterId プロパティが存在しない場合 (またはその値が空の文字列)、既定のスライド マスターが使用され、layoutIdはそのスライド マスターのレイアウトである必要があります。
  • 既定のスライド マスターは、プレゼンテーションの最後のスライドで使用されるスライド マスターです。 (現在プレゼンテーションにスライドがない通常とは異なるケースでは、既定のスライド マスターはプレゼンテーションの最初のスライド マスターです)。
  • layoutId プロパティが存在しない場合 (またはその値が空の文字列)、masterIdで指定されたマスター シェイプの最初のレイアウトが使用されます。
  • どちらのプロパティもnnnnnnnnnnnn#、#mmmmmmmmmmm、または nnnnnnnnnn#mmmmmmmmm の 3 つの形式の文字列です。nnnnnnnn はマスターまたはレイアウトの ID (通常は 10 桁) であり、mmmmmmm はマスターまたはレイアウトの作成 ID (通常は 6 ~ 10 桁) です。 例としては、 2147483690#29082895002147483690##2908289500などがあります。
async function addSlide() {
    await PowerPoint.run(async function(context) {
        context.presentation.slides.add({
            slideMasterId: "2147483690#2908289500",
            layoutId: "2147483691#2499880"
        });
    
        await context.sync();
    });
}

ユーザーがスライド マスターまたはレイアウトの ID または作成 ID を検出できる実用的な方法はありません。 このため、実際には、コーディング時に ID がわかっている場合、またはアドインが実行時にそれらを検出できる場合にのみ、 AddSlideOptions パラメーターを使用できます。 ユーザーが ID を記憶することは想定できないため、ユーザーがスライドを選択できるようにする方法 (名前または画像など) を有効にし、各タイトルまたは画像をスライドの ID に関連付ける方法も必要です。

したがって、 AddSlideOptions パラメーターは主に、ID が既知のスライド マスターとレイアウトの特定のセットで動作するようにアドインが設計されているシナリオで使用されます。 このようなシナリオでは、ユーザーまたは顧客が、選択基準 (スライド マスターやレイアウト名、イメージなど) を対応する ID または作成 ID に関連付けるデータ ソースを作成して管理する必要があります。

ユーザーに一致するスライドを選択させます

既存のスライドで使用されているスライド マスターとレイアウトの同じ組み合わせを新しいスライドで使用する必要があるシナリオでアドインを使用できる場合は、(1) ユーザーにスライドの選択を求め、(2) スライド マスターとレイアウトの ID を読み取ることができます。 次の手順では、ID を読み取り、一致するマスターとレイアウトでスライドを追加する方法を示します。

  1. 選択したスライドのインデックスを取得する関数を作成します。 次に例を示します。 このコードについては、以下の点に注意してください。

    • 一般的な JavaScript API の Office.context.document.getSelectedDataAsync メソッドを使用します。
    • getSelectedDataAsyncの呼び出しは Promise 戻り関数に埋め込まれています。 これを行う理由と方法の詳細については、「 Promise を返す関数で共通 API をラップする」を参照してください。
    • getSelectedDataAsync は、複数のスライドを選択できるため、配列を返します。 このシナリオでは、ユーザーが 1 つだけ選択したので、コードは最初の (0 番目の) スライドを取得します。これは選択したスライドのみです。
    • スライドの index 値は、ユーザーがサムネイル ウィンドウのスライドの横に表示する 1 から始まる値です。
    function getSelectedSlideIndex() {
        return new OfficeExtension.Promise<number>(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].index);
                    }
                } 
                catch (error) {
                    reject(console.log(error));
                }
            });
        });
    }
    
  2. スライドを追加する main 関数の PowerPoint.run() 内で新しい関数を呼び出します。 次に例を示します。

    async function addSlideWithMatchingLayout() {
        await PowerPoint.run(async function(context) {
    
            let selectedSlideIndex = await getSelectedSlideIndex();
    
            // Decrement the index because the value returned by getSelectedSlideIndex()
            // is 1-based, but SlideCollection.getItemAt() is 0-based.
            const realSlideIndex = selectedSlideIndex - 1;
            const selectedSlide = context.presentation.slides.getItemAt(realSlideIndex).load("slideMaster/id, layout/id");
    
            await context.sync();
    
            context.presentation.slides.add({
                slideMasterId: selectedSlide.slideMaster.id,
                layoutId: selectedSlide.layout.id
            });
    
            await context.sync();
        });
    }
    

スライドを削除する

スライドを表す Slide オブジェクトへの参照を取得してスライドを削除し、 Slide.delete メソッドを呼び出します。 次に、4 番目のスライドを削除する例を示します。

async function deleteSlide() {
    await PowerPoint.run(async function(context) {

        // The slide index is zero-based. 
        const slide = context.presentation.slides.getItemAt(3);
        slide.delete();

        await context.sync();
    });
}