C#使用OpenXML为docx添加creator属性并生成匹配Word原生结构文件的方法
问题解答
OpenXML SDK完全支持生成与Word原生结构完全一致、符合ECMA-376标准的DOCX文件,出现该问题是属性操作方式有误导致的,可按以下方案解决:
1. 解决core.xml内容为空的问题
仅创建CoreFilePropertiesPart部件但没有向其中写入属性内容,就会生成空的core.xml文件。正确的核心属性写入代码示例如下:
using (WordprocessingDocument document = WordprocessingDocument.Create("示例文档.docx", WordprocessingDocumentType.Document)) { // 初始化主文档基础结构,不可省略 MainDocumentPart mainDocumentPart = document.AddMainDocumentPart(); mainDocumentPart.Document = new Document(new Body()); // 初始化核心属性部件 CoreFilePropertiesPart corePropsPart = document.CoreFilePropertiesPart ?? document.AddCoreFilePropertiesPart(); // 实例化核心属性对象并赋值 CoreProperties coreProperties = new CoreProperties { Creator = "vso", Title = "文档标题", Subject = "文档主题", Created = new DateTimeValue(DateTime.Now), Modified = new DateTimeValue(DateTime.Now), LastModifiedBy = "vso" }; // 将属性写入核心属性部件 corePropsPart.Properties = coreProperties; mainDocumentPart.Document.Save(); }
2. 解决生成结构与Word原生不一致、校验不通过的问题
之前使用document.PackageProperties.Creator赋值的方式属于包级属性的兼容操作,生成的核心属性结构不符合Office Open XML最新规范,因此会出现结构差异、校验不通过的问题。改用上述操作CoreFilePropertiesPart下强类型CoreProperties对象的方式,生成的core.xml结构就会和Word原生生成的完全一致。
如果需要完全对齐Word原生的全量结构,还需要注意以下几点:
- 按需补全Word默认生成的其他可选部件:如自定义属性部件、扩展属性部件等
- 所有文档结构修改都使用OpenXML SDK提供的强类型对象操作,不要直接修改原始XML内容,也不要直接操作Package级的属性
- 生成完成后可使用OpenXML SDK内置的
OpenXmlValidator工具做合规校验,校验通过的文件即可通过微软生产力工具的校验
内容的提问来源于stack exchange,提问作者vso
相关产品推荐
相关产品推荐

