检索演示文档中的幻灯片数量

本主题演示如何使用 Open XML SDK for Office 中的类以编程方式检索演示文稿文档中的幻灯片数(包括或不包含隐藏幻灯片),而无需将文档加载到 Microsoft PowerPoint 中。 它包含演示此任务的示例 RetrieveNumberOfSlides 方法。


RetrieveNumberOfSlides 方法

可以使用 RetrieveNumberOfSlides 方法获取演示文稿文档中的幻灯片数(可选)包括隐藏的幻灯片。 方法 RetrieveNumberOfSlides 接受两个参数:指示要检查的文件路径的字符串,以及指示是否在计数中包含隐藏幻灯片的可选布尔值。

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

调用 RetrieveNumberOfSlides 方法

该方法返回指示幻灯片数量的整数,可以统计所有幻灯片,也可以仅统计可见幻灯片,具体取决于第二个参数值。 要调用该方法,请传递所有参数值,如下面的代码所示。

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

代码的工作方式

代码首先创建一个整数变量 slidesCount,用于保存幻灯片数。 然后,该代码使用 Open 方法打开指定的演示文稿,并指示文档应打开以便进行只读访问, (最终 false 参数值) 。 给定打开的演示文稿,代码使用 PresentationPart 属性导航到main演示文稿部件,并将引用存储在名为 的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 通常不会设置此属性的值,除非要隐藏幻灯片。 属性存在且值为 true 的唯一方式Show是,如果已隐藏并取消隐藏幻灯片,则为 。 以下代码使用 Where 具有 lambda 表达式的 函数来执行工作。

// 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;
}

另请参阅