プレゼンテーション スライドを操作する

このトピックでは、Open XML SDK for Office Slide クラスと、Open XML ファイル形式 PresentationML スキーマとの関係について説明します。 PresentationML ドキュメントを構成するパーツと要素の全体的な構造の詳細については、「 PresentationML ドキュメントの構造**」を参照してください。


PresentationML でのプレゼンテーション スライド

ISO/IEC 29500 仕様で、Open XML PresentationML の PresentationML ドキュメントのプレゼンテーション スライドを表すための <sld> 要素は、次のように記述されています。

この要素は、スライド リスト内の特定のスライドを指定するものです。 スライド リストは、スライドの順序を指定するために使われます。

例: 次の目的別スライド ショーでスライドの順序を考察してください。

<p:custShowLst>  
    <p:custShow name="Custom Show 1" id="0">  
        <p:sldLst>  
            <p:sld r:id="rId4"/>  
            <p:sld r:id="rId3"/>  
            <p:sld r:id="rId2"/>  
            <p:sld r:id="rId5"/>  
        </p:sldLst>  
    </p:custShow>  
</p:custShowLst>

上の例で、スライドを表示する順序は、スライド 4 の後、3、2、そして最後が 5 となります。

© ISO/IEC29500: 2008.

<sld> 要素は、PresentationML パーツのルート要素です。 PresentationML ドキュメントを構成するパーツと要素の全体構造の詳細については、「PresentationML ドキュメントの構造」を参照してください。

次の表は、プレゼンテーション スライドを操作するときに使用される sld> 要素の子要素<と、それらに対応する Open XML SDK クラスの一覧です。

PresentationML 要素 Open XML SDK クラス
<clrMapOvr> ColorMapOverride
<cSld> CommonSlideData
<extLst> ExtensionListWithModification
<timing> Timing
<transition> Transition

XML SDK スライド クラスを開く

Open XML SDKSlide クラスは、PresentationML ドキュメントの <Open XML ファイル形式スキーマで定義されている sld> 要素を表します。 Slide オブジェクトは、PresentationML ドキュメントの個々の <sld> 要素を操作するために使用します。

Slide クラスに一般的に関連しているクラスについて、以下のセクションに示します。

ColorMapOverride クラス

ColorMapOverride クラスは、<clrMapOvr> 要素に対応します。 次の記述は ISO/IEC 29500 の仕様からの引用で、<clrMapOvr> 要素について説明しています。

この要素は、<ClrMap> 要素内に一覧表示される配色を上書きするメカニズムを提供します。 <masterClrMapping> 子要素が存在する場合、マスターによって定義された配色を使用します。 <overrideClrMapping> 子要素が存在する場合、親ノート スライド、プレゼンテーション スライド、スライドのレイアウトなどに特定の新しい配色を定義します。

© ISO/IEC29500: 2008.

CommonSlideData クラス

CommonSlideData クラスは、<cSld> 要素に対応します。 ISO/IEC 29500 の仕様に記載されている次の情報は、<cSld> 要素について説明しています。

この要素は、すべてのスライドの種類に関連する、スライド情報の種類のコンテナーを指定します。 すべてのスライドは、スライドの種類に依存しない共通のプロパティ セットを共有します。特定のスライドのこれらのプロパティの説明は、スライドの <cSld> コンテナー内に保存されます。 親要素によって示されるスライドの種類に固有のスライド データは、別の場所に保存されます。

<cSld> 内の実際のデータは、特定の親スライドだけを記述します。ここにはすべてのスライドに共通の情報のタイプだけが格納されます。

© ISO/IEC29500: 2008.

ExtensionListWithModification クラス

ExtensionListWithModification クラスは、<extLst> 要素に対応します。 ISO/IEC 29500 の仕様に記載されている次の情報は、<extLst> 要素について説明しています。

この要素は、要素の種類 <ext> の将来の拡張機能すべてが定義されている、修正機能を備えた拡張情報リストを指定します。 拡張情報リストおよび対応する将来の拡張機能を使用して、PresentationML フレームワークのストレージ機能を拡張します。 これにより、さまざまな新たな種類のデータをこのフレームワークにネイティブに格納できます。

[注: この extLst 要素を使用すると、生成元アプリケーションではこの拡張プロパティが変更されたかどうかを格納できます。 注の終了]

© ISO/IEC29500: 2008.

Timing クラス

Timing クラスは、<timing> 要素に対応します。 ISO/IEC 29500 の仕様に記載されている次の情報は、<timing> 要素について説明しています。

この要素は、すべてのアニメーションの処理のタイミング情報および対応するスライド内の時間指定イベントを指定します。 この情報は、<timing> 要素内の時間ノードで追跡されます。 これらの時間ノードの固有情報および定義する方法についての詳細情報は、PresentationML フレームワークのアニメーションのセクションにあります。

© ISO/IEC29500: 2008.

Transition クラス

Transition クラスは、<transition> 要素に対応します。 ISO/IEC 29500 の仕様に記載されている次の情報は、<transition> 要素について説明しています。

この要素は、1 つ前のスライドから現在のスライドに切り替えるときに使用する画面切り替えを指定するものです。 つまり、切り替え情報は切り替え完了後に表示されるスライドに格納されます。

© ISO/IEC29500: 2008.


Slide クラスの使用

以下の Open XML SDK のコード サンプルに示すように、Slide クラスのどのインスタンスも、SlidePart クラスのインスタンスに関連付けられます。このクラスは、PresentationML プレゼンテーション ファイル パッケージの必須パーツの 1 つである、スライド パーツを表します。 Slide クラスの各インスタンスは、SlideLayout クラスと SlideMaster クラスのインスタンスに関連付ける必要もあります。これらは、類似の名前の必須プレゼンテーション パーツに関連付けられており、SlideLayoutPart クラスと SlideMasterPart クラスによって表されます。

そのため、<sld> 要素を表す Slide クラスは、<sld> 要素の子要素を表す一連の他のクラスと関連付けられています。 これらのクラスには、次のコード サンプルに示すように、CommonSlideData クラス、ColorMapOverrideクラス、ShapeTree クラス、Shape クラスが含まれます。


Open XML SDK コード例

記事「 方法: ファイル名を指定してプレゼンテーション ドキュメントを作成する」** の次のメソッドは、既存のプレゼンテーションに新しいスライド パーツを追加し、新しいスライド パーツに Open XML SDK Slide クラスのインスタンスを作成します。 Slide クラスのコンストラクターは、CommonSlideData クラスと ColorMapOverride クラスのインスタンスを作成します。 CommonSlideData クラス コンストラクターは、ShapeTree クラスのインスタンスを作成しますが、そのクラスのコンストラクターは、さらに次に示すクラスのインスタンスを作成します。NonVisualGroupShapeProperties クラス、GroupShapeProperties クラス、Shape クラスの各インスタンス。

新しいスライドを表現するのに必要な最小限の XML 要素を作成するために、これらのクラス インスタンスと、<sld> 要素の子要素を表すクラスのインスタンスがすべて必要になります。

コード内の文字 P が表す名前空間は DocumentFormat.OpenXml.Presentation 名前空間です。

    private static SlidePart CreateSlidePart(PresentationPart presentationPart)        
            {
                SlidePart slidePart1 = presentationPart.AddNewPart<SlidePart>("rId2");
                    slidePart1.Slide = new Slide(
                            new CommonSlideData(
                                new ShapeTree(
                                    new P.NonVisualGroupShapeProperties(
                                        new P.NonVisualDrawingProperties() { Id = (UInt32Value)1U, Name = "" },
                                        new P.NonVisualGroupShapeDrawingProperties(),
                                        new ApplicationNonVisualDrawingProperties()),
                                    new GroupShapeProperties(new TransformGroup()),
                                    new P.Shape(
                                        new P.NonVisualShapeProperties(
                                            new P.NonVisualDrawingProperties() { Id = (UInt32Value)2U, Name = "Title 1" },
                                            new P.NonVisualShapeDrawingProperties(new ShapeLocks() { NoGrouping = true }),
                                            new ApplicationNonVisualDrawingProperties(new PlaceholderShape())),
                                        new P.ShapeProperties(),
                                        new P.TextBody(
                                            new BodyProperties(),
                                            new ListStyle(),
                                            new Paragraph(new EndParagraphRunProperties() { Language = "en-US" }))))),
                            new ColorMapOverride(new MasterColorMapping()));
                    return slidePart1;
             }

この図形ツリー、つまりスライドに別の図形を追加するには、次のコードを含む追加パラメーターを ShapeTree コンストラクターに渡して 2 つ目の Shape オブジェクトをインスタンス化します。

    new P.Shape(
              new P.NonVisualShapeProperties(
                  new P.NonVisualDrawingProperties() { Id = (UInt32Value)2U, Name = "Title 1" },
                  new P.NonVisualShapeDrawingProperties(new ShapeLocks() { NoGrouping = true }),
                  new ApplicationNonVisualDrawingProperties(new PlaceholderShape())),
              new P.ShapeProperties(),
              new P.TextBody(
                  new BodyProperties(),
                  new ListStyle(),
                  new Paragraph(new EndParagraphRunProperties() { Language = "en-US" })))

生成される PresentationML

このメソッドの Open XML SDK コードを実行すると、コード内で参照されている PresentationML ドキュメント ファイルに次の XML コードが書き込まれます。

    <?xml version="1.0" encoding="utf-8" ?> 
    <p:sld xmlns:p="https://schemas.openxmlformats.org/presentationml/2006/main">
      <p:cSld>
        <p:spTree>
          <p:nvGrpSpPr>
            <p:cNvPr id="1" name="" /> 
            <p:cNvGrpSpPr /> 
            <p:nvPr /> 
          </p:nvGrpSpPr>
            <p:grpSpPr>
              <a:xfrm xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main" /> 
            </p:grpSpPr>
            <p:sp>
              <p:nvSpPr>
              <p:cNvPr id="2" name="Title 1" /> 
              <p:cNvSpPr>
                <a:spLocks noGrp="1" xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main" /> 
              </p:cNvSpPr>
                <p:nvPr>
                  <p:ph /> 
                </p:nvPr>
                </p:nvSpPr>
                <p:spPr /> 
                <p:txBody>
                 <a:bodyPr xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main" /> 
             <a:lstStyle xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main" /> 
                 <a:p xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main">
                   <a:endParaRPr lang="en-US" /> 
          </a:p>
                </p:txBody>
             </p:sp>
           </p:spTree>
        </p:cSld>
        <p:clrMapOvr>
          <a:masterClrMapping xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main" /> 
        </p:clrMapOvr>
    </p:sld>

関連項目

Open XML SDK for Office について

[方法] プレゼンテーションに新しいスライドを挿入する

[方法] プレゼンテーションからスライドを削除する

[方法] プレゼンテーション ドキュメント内のスライドの数を取得する

[方法] プレゼンテーションにテーマを適用する

方法: ファイル名を指定してプレゼンテーション ドキュメントを作成する