检索演示文档中的幻灯片数量
本主题演示如何使用 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;
}