You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用OpenXML读取PPT备注页(NotesSlide)的页眉和页脚?

读取PPT备注页(NotesSlide)的页眉和页脚(OpenXML实现)

核心思路

备注页的页眉/页脚内容存储在对应幻灯片的NotesSlidePart中,需遍历幻灯片的关联部件定位到NotesSlide,再通过占位符类型筛选出目标文本。

具体实现步骤(C#)

  • 遍历PPT文档所有SlidePart,获取每个幻灯片关联的NotesSlidePart(部分幻灯片无备注页,需做空值判断)
  • 在NotesSlide的形状树中,筛选类型为Header和Footer的占位符形状
  • 提取占位符内的文本内容

代码示例

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Presentation;
using System.Linq;

public static void ReadNotesSlideHeaderFooter(string pptFilePath)
{
    using (PresentationDocument presentationDocument = PresentationDocument.Open(pptFilePath, false))
    {
        foreach (SlidePart slidePart in presentationDocument.PresentationPart.SlideParts)
        {
            // 获取当前幻灯片对应的备注页部件
            NotesSlidePart notesSlidePart = slidePart.NotesSlidePart;
            if (notesSlidePart == null) continue;

            NotesSlide notesSlide = notesSlidePart.NotesSlide;
            if (notesSlide == null) continue;

            // 遍历备注页形状,筛选页眉/页脚占位符
            foreach (Shape shape in notesSlide.ShapeTree.Elements<Shape>())
            {
                PlaceholderShape placeholder = shape.NonVisualShapeProperties.ApplicationNonVisualDrawingProperties.GetFirstChild<PlaceholderShape>();
                if (placeholder == null) continue;

                // 读取页眉
                if (placeholder.Type == PlaceholderValues.Header)
                {
                    string headerText = shape.TextBody.Elements<Paragraph>()
                        .Select(p => string.Join("", p.Elements<Run>().Select(r => r.Text.Text)))
                        .Aggregate((curr, next) => curr + "\n");
                    System.Console.WriteLine($"幻灯片{slidePart.SlideIdPart.SlideId.Value}备注页页眉:{headerText}");
                }

                // 读取页脚
                if (placeholder.Type == PlaceholderValues.Footer)
                {
                    string footerText = shape.TextBody.Elements<Paragraph>()
                        .Select(p => string.Join("", p.Elements<Run>().Select(r => r.Text.Text)))
                        .Aggregate((curr, next) => curr + "\n");
                    System.Console.WriteLine($"幻灯片{slidePart.SlideIdPart.SlideId.Value}备注页页脚:{footerText}");
                }
            }
        }
    }
}

关键说明

  • 必须从NotesSlidePart读取,而非幻灯片的SlidePart,二者占位符分属不同部件
  • 若备注页未自定义页眉/页脚,需从NotesMasterPart(备注母版)读取默认值
  • 通过PlaceholderShape.Type精准筛选备注页专属的页眉/页脚,避免和幻灯片的页眉/页脚混淆

内容的提问来源于stack exchange,提问作者Beto Hiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:40:30