PowerPoint でプレゼンテーション、スライド、図形にカスタム タグを使用する

アドインは、"タグ" と呼ばれるキーと値のペアの形式で、プレゼンテーション、特定のスライド、スライド上の特定の図形にカスタム メタデータを添付できます。

タグを使用する主なシナリオは 2 つあります。

  • スライドまたは図形に適用すると、タグを使用すると、オブジェクトをバッチ処理用に分類できます。 たとえば、プレゼンテーションに、東リージョンへのプレゼンテーションに含める必要があるが、西部リージョンには含まれないスライドがあるとします。 同様に、西部にのみ表示する必要がある代替スライドがあります。 アドインは、キー REGION と値 East を含むタグを作成し、東でのみ使用する必要があるスライドに適用できます。 タグの値は、West リージョンにのみ表示する必要があるスライドに対して に設定 West されます。 東へのプレゼンテーションの直前に、アドインのボタンによって、タグの値をチェックするすべてのスライドをループするコードが REGION 実行されます。 リージョン West が削除されるスライド。 その後、ユーザーはアドインを閉じ、スライド ショーを開始します。
  • プレゼンテーションに適用すると、タグは実質的にプレゼンテーション ドキュメントのカスタム プロパティになります (Word の CustomProperty に似ています)。

スライドと図形にタグを付け

タグはキーと値のペアであり、値は常に型 string であり、 Tag オブジェクトによって表されます。 PresentationSlideShape オブジェクトなどの親オブジェクトの各型にはtagsTagsCollection 型のプロパティがあります。

タグの追加、更新、削除

オブジェクトにタグを追加するには、親オブジェクトtagsのプロパティの TagCollection.add メソッドを呼び出します。 次のコードは、プレゼンテーションの最初のスライドに 2 つのタグを追加します。 このコードについては、以下の点に注意してください。

  • メソッドの最初の add パラメーターは、キーと値のペアのキーです。
  • 2 番目のパラメーターは値です。
  • キーは大文字です。 これはメソッドに対して add 厳密には必須ではありません。ただし、キーは常に PowerPoint によって大文字として格納されます。また、 タグ関連のメソッドによっては、キーを大文字で表す必要があるため、タグ キーのコードでは常に大文字を使用することをお勧めします。
async function addMultipleSlideTags() {
  await PowerPoint.run(async function(context) {
    const slide = context.presentation.slides.getItemAt(0);
    slide.tags.add("OCEAN", "Arctic");
    slide.tags.add("PLANET", "Jupiter");

    await context.sync();
  });
}

addメソッドは、タグの更新にも使用されます。 次のコードは、タグの値を PLANET 変更します。

async function updateTag() {
  await PowerPoint.run(async function(context) {
    const slide = context.presentation.slides.getItemAt(0);
    slide.tags.add("PLANET", "Mars");

    await context.sync();
  });
}

タグを削除するには、親TagsCollectionオブジェクトの メソッドをdelete呼び出し、タグのキーを パラメーターとして渡します。 例については、「 プレゼンテーションでカスタム メタデータを設定する」を参照してください。

タグを使用してスライドと図形を選択的に処理する

次のシナリオを考えてみましょう。Contoso コンサルティングには、すべての新規顧客に表示されるプレゼンテーションがあります。 ただし、一部のスライドは、"Premium" 状態に対して支払った顧客にのみ表示する必要があります。 プレミアム以外の顧客にプレゼンテーションを表示する前に、プレゼンテーションのコピーを作成し、プレミアムユーザーのみが表示するスライドを削除します。 アドインを使用すると、Contoso はプレミアム顧客向けのスライドにタグを付け、必要に応じてこれらのスライドを削除できます。 次の一覧では、この機能を作成するための主要なコーディング手順について説明します。

  1. 現在選択されているスライドを顧客の意図どおりにタグ付けする関数を Premium 作成します。 このコードについては、以下の点に注意してください。

    • 関数は getSelectedSlideIndex 、次の手順で定義します。 現在選択されているスライドの 1 から始まるインデックスを返します。
    • SlideCollection.getItemAt メソッドが 0 から始まるため、関数によってgetSelectedSlideIndex返される値はデクリメントする必要があります。
    async function addTagToSelectedSlide() {
      await PowerPoint.run(async function(context) {
        let selectedSlideIndex = await getSelectedSlideIndex();
        selectedSlideIndex = selectedSlideIndex - 1;
        const slide = context.presentation.slides.getItemAt(selectedSlideIndex);
        slide.tags.add("CUSTOMER_TYPE", "Premium");
    
        await context.sync();
      });
    }
    
  2. 次のコードでは、選択したスライドのインデックスを取得するメソッドを作成します。 このコードについては、以下の点に注意してください。

    • 一般的な JavaScript API の Office.context.document.getSelectedDataAsync メソッドを使用します。
    • getSelectedDataAsync 呼び出しは、promise-returning 関数に埋め込まれています。 これを行う理由と方法の詳細については、「 Promise を返す関数で共通 API をラップする」を参照してください。
    • getSelectedDataAsync は、複数のスライドを選択できるため、配列を返します。 このシナリオでは、ユーザーが 1 つだけ選択したので、コードは最初の (0 番目の) スライドを取得します。これは選択したスライドのみです。
    • スライドの値は index 、ユーザーが PowerPoint UI サムネイル ウィンドウのスライドの横に表示する 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));
                }
            });
        });
    }
    
  3. 次のコードでは、Premium のお客様向けにタグ付けされたスライドを削除する関数を作成します。 このコードについては、以下の点に注意してください。

    • keyタグの プロパティと value プロパティは、 の後で読み取られるので、context.sync最初に読み込む必要があります。
    async function deleteSlidesByAudience() {
      await PowerPoint.run(async function(context) {
        const slides = context.presentation.slides;
        slides.load("tags/key, tags/value");
    
        await context.sync();
    
        for (let i = 0; i < slides.items.length; i++) {
          let currentSlide = slides.items[i];
          for (let j = 0; j < currentSlide.tags.items.length; j++) {
            let currentTag = currentSlide.tags.items[j];
            if (currentTag.key === "CUSTOMER_TYPE" && currentTag.value === "Premium") {
              currentSlide.delete();
            }
          }
        }
    
        await context.sync();
      });
    }
    

プレゼンテーションでカスタム メタデータを設定する

アドインは、プレゼンテーション全体にタグを適用することもできます。 これにより、Word で CustomPropertyクラスを使用する方法と同様に、ドキュメント レベルのメタデータにタグを使用できます。 ただし、Word CustomProperty クラスとは異なり、PowerPoint タグの値には 型 stringのみを指定できます。

次のコードは、プレゼンテーションにタグを追加する例です。

async function addPresentationTag() {
  await PowerPoint.run(async function (context) {
    let presentationTags = context.presentation.tags;
    presentationTags.add("SECURITY", "Internal-Audience-Only");

    await context.sync();
  });
}

次のコードは、プレゼンテーションからタグを削除する例です。 タグのキーは親TagsCollectionオブジェクトの メソッドにdelete渡されることに注意してください。

async function deletePresentationTag() {
  await PowerPoint.run(async function (context) {
    let presentationTags = context.presentation.tags;
    presentationTags.delete("SECURITY");

    await context.sync();
  });
}