如何通过VSTO/C#读取PowerPoint的文档属性(含字数统计)
VSTO+C# 读取PowerPoint信息面板文档属性实现指南
核心对象模型说明
- PowerPoint「信息」面板内展示的所有文档属性、统计指标,都可以通过VSTO暴露的COM互操作接口直接读取,不需要解析UI层元素
- 面板展示的所有属性和对象模型存储的内容一一对应,具体分为三类:
- 基础元数据(作者、文档标题、创建时间、最后修改人等):存储在
Presentation.BuiltInDocumentProperties内置属性集合中 - 统计类指标(字数、备注段落数、幻灯片页数等):归属于内置属性集合,通过固定枚举值索引读取
- 自定义属性项:存储在
Presentation.CustomDocumentProperties集合中,和「高级属性」弹窗内自定义标签页的内容完全一致
- 基础元数据(作者、文档标题、创建时间、最后修改人等):存储在
可复用参考示例代码
// 开发前需引用对应版本的 Office 互操作程序集:Microsoft.Office.Interop.PowerPoint、Office 核心互操作库 using Microsoft.Office.Core; using PowerPoint = Microsoft.Office.Interop.PowerPoint; public void ReadInfoPanelProperties() { // 获取当前激活的打开演示文稿 PowerPoint.Presentation activePres = Globals.ThisAddIn.Application.ActivePresentation; // 加载内置文档属性集合 dynamic builtInProps = activePres.BuiltInDocumentProperties; // 读取面板展示的字数统计指标 int totalWordCount = Convert.ToInt32(builtInProps[MsoDocProperties.msoPropertyNumberOfWords].Value); // 读取其他常用面板属性 string docAuthor = builtInProps[MsoDocProperties.msoPropertyAuthor].Value.ToString(); string docTitle = builtInProps[MsoDocProperties.msoPropertySubject].Value.ToString(); DateTime lastModifyTime = Convert.ToDateTime(builtInProps[MsoDocProperties.msoPropertyLastSaveTime].Value); // 读取自定义属性集合内容(对应面板高级属性的自定义页展示项) dynamic customProps = activePres.CustomDocumentProperties; foreach (dynamic customProp in customProps) { // 遍历输出所有自定义属性的名称和值 Console.WriteLine($"自定义属性:{customProp.Name} = {customProp.Value}"); } }
实现注意事项
- 从内置/自定义属性集合取出的属性值为动态对象类型,所有取值必须做显式类型转换,否则会触发运行时绑定错误
- 新建未保存的演示文稿,部分统计属性默认返回0值,可直接读取不需要做额外兼容
- 幻灯片总数、页面尺寸这类基础参数属于
Presentation对象的原生属性,不需要通过文档属性集合读取,直接访问对应属性即可 - 整个读取过程对用户无感知,不会弹出额外的PowerPoint窗口或打断用户操作流程
- 若读取属性时触发空引用异常,需先判断对应属性的
Value字段是否为null,再做类型转换
内容的提问来源于stack exchange,提问作者Roger Heckly
相关产品推荐
相关产品推荐

