スライド レイアウトを操作する

このトピックでは、Open XML SDK for Office SlideLayout クラスと、Open XML ファイル形式 PresentationML スキーマとの関係について説明します。

PresentationML のスライド レイアウト

ISO/IEC 29500 仕様では、PresentationML ドキュメントでスライド レイアウトを表すために使用される Open XML PresentationML の <sldLayout> 要素が次のように説明されています。

この要素は、スライド レイアウトのインスタンスを指定します。 スライド レイアウトには、基本的に、既存のスライドに適用できるテンプレート スライド デザインが含まれます。 既存のスライドに適用すると、対応するすべてのコンテンツが新しいスライド レイアウトにマップされます。

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

次の表に、スライド レイアウトを操作するときに使用される sldLayout> 要素の子要素<と、それらに対応する Open XML SDK クラスの一覧を示します。

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

ISO/IEC 29500 の仕様に記載されている以下の表は、<sldLayout> 要素の属性を示しています。

属性 説明
matchingName (一致する名前) cSld 要素内で name 属性の代わりに使用する名前を指定します。 レイアウトの変更およびテンプレートの適用に対してレイアウトを一致するために使用されます。
この属性で使用できる値は、W3C XML スキーマの string データ型で定義されています。
preserve (スライド レイアウトの維持) そのレイアウトを使用するすべてのスライドが削除されたら対応するスライド レイアウトを削除するかどうかを指定します。 この属性が指定されていない場合、生成元のアプリケーションでは false の値を前提とします。 これは、プレゼンテーション内のスライドが関連付けられていない場合、スライドを実際に削除することを意味します。
この属性で使用できる値は、W3C XML スキーマの boolean データ型で定義されています。
showMasterPhAnim (マスター プレースホルダー アニメーションの表示) マスター スライドからプレースホルダーにアニメーションを表示するかどうかを指定します。
この属性に指定できる値は、W3C XML スキーマの boolean データ型で定義されます。
showMasterSp (マスター図形の表示) マスター スライド上の図形をスライドに表示するかどうかを指定します。
この属性で使用できる値は、W3C XML スキーマの boolean データ型で定義されています。
type (スライド レイアウトのタイプ) このスライドで使用するスライド レイアウトのタイプを指定します。
この属性に指定できる値は、ST_SlideLayoutType 単純型 (§19.7.15) で定義されています。
userDrawn (ユーザー描画) 対応するオブジェクトはユーザーによって描画されたものであり、削除してはならないことを指定します。 ユーザー描画データを含むスライドの指示に使用できます。
この属性で使用できる値は、W3C XML スキーマの boolean データ型で定義されています。

Open XML SDK SlideLayout クラス

Open XML SDK の SlideLayout クラスは、Open XML ファイル形式のスキーマで規定されている PresentationML ドキュメント用の <sldLayout> 要素を表します。 SlideLayout クラスを使用して、PresentationML ドキュメント内の個々の <sldLayout> 要素を操作します。

<sldLayout> 要素の子要素を表すため、SlideLayout クラスに一般に関連付けられるクラスを、次に示します。

ColorMapOverride クラス

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

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

CommonSlideData クラス

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

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

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

ExtensionListWithModification クラス

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

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

注:

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

HeaderFooter クラス

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

この要素は、スライドのヘッダーおよびフッター情報を指定します。 ヘッダーおよびフッターは、日時、スライド番号、ユーザー設定のヘッダーおよびフッター テキストなど、すべてのスライドおよびスライドの種類で一貫している必要がある、テキストのプレースホルダーで構成されています。

Timing クラス

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

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

Transition クラス

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

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

SlideLayout クラスの使用

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

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

Open XML SDK コード例

記事「方法: ファイル名を指定してプレゼンテーション ドキュメントを作成する」の次のメソッドは、既存のプレゼンテーションに新しいスライド レイアウト パーツを追加し、新しいスライド レイアウト パーツに Open XML SDKSlideLayout クラスのインスタンスを作成します。 SlideLayout クラスのコンストラクターは、CommonSlideData クラスおよび ColorMapOverride クラスのインスタンスを作成します。 CommonSlideData クラス コンストラクターは、ShapeTree クラスのインスタンスを作成します。そのコンストラクターにより、追加のクラス インスタンス ([NonVisualGroupShapeProperties (https://msdn.microsoft.com/library/office/documentformat.openxml.presentation.nonvisualgroupshapeproperties.aspx) クラス、GroupShapeProperties クラスのインスタンス、および Shape クラスのインスタンス) が作成されます。

コード内の 文字 P で表される名前空間は、[DocumentFormat.OpenXml.Presentation (https://msdn.microsoft.com/library/office/documentformat.openxml.presentation.aspx) 名前空間) です。

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Drawing;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Presentation;
using P = DocumentFormat.OpenXml.Presentation;

static SlideLayoutPart CreateSlideLayoutPart(SlidePart slidePart1)
{
    SlideLayoutPart slideLayoutPart1 = slidePart1.AddNewPart<SlideLayoutPart>("rId1");
    SlideLayout slideLayout = new SlideLayout(
    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 = "" },
        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()))))),
    new ColorMapOverride(new MasterColorMapping()));
    slideLayoutPart1.SlideLayout = slideLayout;
    return slideLayoutPart1;
}