次の方法で共有


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#mmmmmmmmm、#または nnnnnnnnnnnn#mmmmmmm のいずれかの文字列です。nnnnnnnnnn はマスターまたはレイアウトの ID (通常は 10 桁) で、mmmmmmmmm はマスターまたはレイアウトの作成 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 を検出できる実用的な方法はありません。 このため、 パラメーターは、コーディング時に AddSlideOptions ID がわかっている場合、またはアドインが実行時にそれらを検出できる場合にのみ使用できます。 ユーザーが 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. スライドを追加するメイン関数の 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();
    });
}