本文记录在 OpenXML SDK 2.15 版本下,为 PPTX 文件添加 CoreFilePropertiesPart 的方法,通过本文的方法可以正确且简单的添加 core.xml 文件到 PPTX 文件里
当前的 OpenXML SDK 存在已知问题,那就是默认情况下生成不包含 core.xml 文件,请参阅 https://github.com/dotnet/Open-XML-SDK/issues/1093
在 OpenXML SDK 里面提供了 AddCoreFilePropertiesPart 方法可以用来添加 CoreFilePropertiesPart 的内容。但是对其调用有要求,比如说在 PresentationDocument 的 PackageProperties 属性赋值之前进行调用,如以下代码,则会出现 System.Xml.XmlException:“Root element is missing.”
异常
以上代码进入到设置 PackageProperties.Creator
属性时,将会收到 System.Xml.XmlException:“Root element is missing.”
异常。这是因为预期的 CoreFilePropertiesPart 已经存在,但是里面没有任何内容
这时候网上的许多方法都是推荐采用如下或类似的代码写入 CoreFilePropertiesPart 的内容
尽管以上代码能够正常工作,但代码不好看
如果你不小心抄错了 EXCEL 的代码,那你将会遇到 System.Xml.XmlException:“Unrecognized root element in Core Properties part. Line 2, position 2.”
错误哈
下面我推荐给大家一个简单的代码方法,那就是在 SetPackageProperties 完成之后再调用 AddCoreFilePropertiesPart 方法,也就是将 SetPackageProperties 方法先调用,代码如下
看起来十分简单,只是将 SetPackageProperties 和 AddCoreFilePropertiesPart 的调用顺序调换即可
如果 SetPackageProperties 等是生成的代码,不想修改顺序,可以在 AddCoreFilePropertiesPart 方法调用之前,随意对 PackageProperties 的属性进行赋值,如下面代码
通过以上的方法即可成功创建 core.xml 文件到 PPTX 文件里面。如果你使用本文的方法没有创建成功,那我推荐你使用下面的方法拉取本文的代码,跑一下代码试试
本文以上代码放在github 和 gitee 欢迎访问
可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码
以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码
获取代码之后,进入 WefejurkawFekejiyi 文件夹
更多关于 CoreFilePropertiesPart 请参阅 ECMA 376 文档的 15.2.12.1 章内容
更多关于 OpenXML 相关知识,请参阅 Office 使用 OpenXML SDK 解析文档博客目录
原文链接: http://blog.lindexi.com/post/dotnet-OpenXML-SDK-%E6%B7%BB%E5%8A%A0-CoreFilePropertiesPart-%E7%9A%84%E6%96%B9%E6%B3%95
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 林德熙 (包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我 联系。