OpenXML SDK怎么用 C#操作Word(docx)的XML
#技术教程 发布时间: 2026-01-13
Open XML SDK 是微软官方 .NET 类库,用于直接读写 Office Open XML 文件(如 .docx),不依赖 Word 应用程序;通过强类型对象模型(如 Document、Paragraph)操作内容,自动处理 XML 序列化与包结构;需安装 DocumentFormat.OpenXml NuGet 包,创建文档须手动添加 MainDocumentPart 并初始化 Document 根元素;插入文本需按 Body→Paragraph→Run→Text 层级构建对象树后 Append;修改现有文档可遍历 Text 元素赋值;直触 XML 时须注意命名空间和流操作规范;每次操作后须调用 Close() 或使用 using 确保资源释放。
Open XML SDK 是微软提供的用于操作 Office Open XML 文件(如 .docx、.xlsx、.pptx)的官方 .NET 类库。它不依赖 Word 应用程序,而是直接读写底层 ZIP 封装内的 XML 内容,性能高、可控性强。用 C# 操作 Word 文档的 XML,本质是通过 SDK 提供的强类型对象模型(如 Document、Paragraph、Run 等)来增删改查内容,SDK 自动处理底层 XML 序列化与包结构(如 document.xml、rels、styles.xml 等)。
安装 Open XML SDK 并创建基础文档
在项目中安装 NuGet 包:DocumentFormat.OpenXml(最新稳定版,如 3.0+)。注意:.NET 6/7/8 项目推荐使用该包;旧版 OpenXML SDK 2.5 已停止更新,且需额外安装运行时。
- 新建空白 .docx:用
WordprocessingDocument.Create()创建新文件,指定WordprocessingDocumentType.Document - 必须手动添加主文档部件(
MainDocumentPart),再通过AddMainDocumentPart()获取引用 - 调用
MainDocumentPart.Document = new Document()初始化根元素,否则后续操作会抛异常
向文档插入文本与段落
所有内容都封装在 Body → Paragraph → Run → Text 的层级中。SDK 不直接编辑原始 XML 字符串,而是构建对象树后保存。
- 获取
Body:通过mainPart.Document.Body ??= new Body()确保存在 - 新建段落:
var para = new Paragraph(new Run(new Text("Hello, World!"))) - 追加到文档:
body.Append(para)(注意不是AppendChild,这是常见误区) - 支持格式:可在
Run中添加RunProperties设置字体、加粗、颜色等
读取并修改现有文档中的文本
打开已有 .docx 时用 WordprocessingDocument.Open(path, isEditable: true)。读取文本需遍历 Paragraph 和 Text 元素。
- 获取所有文本节点:
doc.MainDocumentPart.Document.Body.Descendants() - 修改内容:
textNode.Text = "New content"(直接赋值即可,SDK 会在 Save() 时同步) - 注意:不要直接修改
InnerText或手动拼接 XML 字符串——这会破坏命名空间和结构,SDK 会忽略或报错 - 若需定位特定段落(如含某关键词),可用 LINQ 配合
InnerText或GetText()辅助方法
访问底层 XML 进行高级定制
虽然 SDK 推荐使用对象模型,但某些场景(如插入自定义 XML 部件、修改页眉页脚复杂结构、调试)需要直触 XML。
- 获取原始 XML
字符串:mainPart.GetStream().ReadAllText()(仅用于查看,不可直接修改后写回) - 安全方式:用
mainPart.Document.Save(mainPart.GetStream())保存对象树;若需注入自定义 XML 片段,应通过OuterXml属性或XmlDocument加载后插入节点(需严格匹配命名空间) - 常用命名空间前缀:
w:(wordprocessingML)、r:(relationships)、mc:(markup compatibility)——SDK 对象已自动处理,手动操作 XML 时必须显式声明
不复杂但容易忽略:每次修改后必须调用 document.Close() 或使用 using 语句释放资源,否则文件可能被锁住或内容未写入磁盘。
上一篇 : 忘记oppo手机密码怎样重设_oppo手机密码重置实用指南【方案】
下一篇 : 苹果17闹钟怎么设置世界时钟闹钟_苹果17世界时钟闹钟设置【步骤】
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!
字符串: