次の方法で共有


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

このトピックでは、Open XML SDK for Office のクラスを使用して、Microsoft PowerPointにドキュメントを読み込まずに、非表示のスライドを含むかどうかにかかわらず、プレゼンテーション ドキュメント内のスライドの数をプログラムで取得する方法について説明します。 このタスクを示すメソッド RetrieveNumberOfSlides 例が含まれています。


RetrieveNumberOfSlides メソッド

RetrieveNumberOfSlides メソッドを使用して、プレゼンテーション ドキュメント内のスライドの数を取得できます(必要に応じて非表示のスライドを含む)。 RetrieveNumberOfSlides メソッドは、調べるファイルのパスを示す文字列と、非表示のスライドをカウントに含めるかどうかを示すオプションのブール値の 2 つのパラメーターを受け取ります。

static int RetrieveNumberOfSlides(string fileName, string includeHidden = "true")

RetrieveNumberOfSlides メソッドの呼び出し

メソッドは、2 番目のパラメーター値に応じて、すべてのスライドまたは表示されるスライドのみをカウントして、スライドの数を示す整数を返します。 メソッドを呼び出すには、次のコードに示すように、すべてのパラメーター値を渡します。

if (args is [{ } fileName, { } includeHidden])
{
    RetrieveNumberOfSlides(fileName, includeHidden);
}
else if (args is [{ } fileName2])
{
    RetrieveNumberOfSlides(fileName2);
}

コードの動作のしくみ

このコードは、まず、スライドの数を保持するために、 slidesCount整数変数を作成することから始めます。 その後、コードは、 Open メソッドを使用して指定されたプレゼンテーションを開き、ドキュメントを読み取り専用アクセス (最終的な false パラメーター値) で開く必要があることを示します。 開いているプレゼンテーションの場合、コードは PresentationPart プロパティを使用してメインプレゼンテーション パーツに移動し、参照を presentationPart という名前の変数に格納します。

using (PresentationDocument doc = PresentationDocument.Open(fileName, false))
{
    if (doc.PresentationPart is not null)
    {
        // Get the presentation part of the document.
        PresentationPart presentationPart = doc.PresentationPart;

すべてのスライドの数を取得する

プレゼンテーション パーツ参照が null でない場合 (また、PowerPointに正しく読み込まれる有効なプレゼンテーションの場合)、次に、コードはプレゼンテーション パーツの SlideParts プロパティの値に対して Count メソッドを呼び出します。 非表示スライドを含むすべてのスライドが必要な場合は、このコードですべて完了します。 非表示スライドを除外する場合は、以下のコードに示すように、少し作業が多くなります。

if (includeHidden.ToUpper() == "TRUE")
{
    slidesCount = presentationPart.SlideParts.Count();
}
else
{

表示されるスライドの数を取得する

コードが戻り値を制限して表示されるスライドのみを含むように要求した場合、コードは、値を含む Show プロパティを持つスライドのみを含むようにスライドのコレクションをフィルター処理し、値が trueする必要があります。 Show プロパティが null の場合は、スライドが表示されていることを示します。 これは最も起こりうるシナリオです。 PowerPointは、スライドを非表示にしない限り、一般に、このプロパティの値を設定しません。 Showプロパティが存在し、trueの値を持つ唯一の方法は、スライドを非表示にしてから非表示にした場合です。 次のコードでは、ラムダ式で Where 関数を使用して作業を行います。

// Each slide can include a Show property, which if hidden 
// will contain the value "0". The Show property may not 
// exist, and most likely will not, for non-hidden slides.
var slides = presentationPart.SlideParts.Where(
    (s) => (s.Slide is not null) &&
      ((s.Slide.Show is null) || (s.Slide.Show.HasValue && s.Slide.Show.Value)));

slidesCount = slides.Count();

サンプル コード

C# と Visual Basic の完全な RetrieveNumberOfSlides コード サンプルを次に示します。

if (args is [{ } fileName, { } includeHidden])
{
    RetrieveNumberOfSlides(fileName, includeHidden);
}
else if (args is [{ } fileName2])
{
    RetrieveNumberOfSlides(fileName2);
}

static int RetrieveNumberOfSlides(string fileName, string includeHidden = "true")
{
    int slidesCount = 0;
    using (PresentationDocument doc = PresentationDocument.Open(fileName, false))
    {
        if (doc.PresentationPart is not null)
        {
            // Get the presentation part of the document.
            PresentationPart presentationPart = doc.PresentationPart;

            if (presentationPart is not null)
            {
                if (includeHidden.ToUpper() == "TRUE")
                {
                    slidesCount = presentationPart.SlideParts.Count();
                }
                else
                {
                    // Each slide can include a Show property, which if hidden 
                    // will contain the value "0". The Show property may not 
                    // exist, and most likely will not, for non-hidden slides.
                    var slides = presentationPart.SlideParts.Where(
                        (s) => (s.Slide is not null) &&
                          ((s.Slide.Show is null) || (s.Slide.Show.HasValue && s.Slide.Show.Value)));

                    slidesCount = slides.Count();
                }
            }
        }
    }

    Console.WriteLine($"Slide Count: {slidesCount}");

    return slidesCount;
}

関連項目