在C#开发中,操作Word文档的需求十分常见,向文档插入新段落、根据业务规则隐藏指定段落是很多项目需要处理的功能。接下来将介绍不依赖第三方付费组件,基于Open XML SDK实现这两个功能的具体方法。

环境准备
首先需要安装Open XML SDK,用于操作Word文档的底层结构。在Visual Studio中通过NuGet包管理器搜索DocumentFormat.OpenXml并安装即可,安装完成后就可以在项目中引用相关命名空间。
向Word文档插入段落
插入段落的核心逻辑
Word文档的结构基于Open XML规范,一个段落对应Paragraph元素,插入段落的本质就是在文档的Body节点下添加新的Paragraph实例,同时配置段落的文本内容和基础样式。
实现代码示例
以下代码实现了向指定Word文档的末尾插入一个新段落的功能:
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
namespace WordOperationDemo
{
class Program
{
static void Main(string[] args)
{
string filePath = @"D:test.docx";
// 打开Word文档,设置为可编辑模式
using (WordprocessingDocument doc = WordprocessingDocument.Open(filePath, true))
{
// 获取文档的主体部分
Body body = doc.MainDocumentPart.Document.Body;
// 创建新的段落实例
Paragraph newParagraph = new Paragraph();
// 创建段落中的文本运行
Run run = new Run();
// 设置文本内容
Text text = new Text("这是通过C#插入的新段落内容");
run.Append(text);
// 将文本运行添加到段落中
newParagraph.Append(run);
// 将新段落添加到文档主体末尾
body.Append(newParagraph);
// 保存文档修改
doc.MainDocumentPart.Document.Save();
}
Console.WriteLine("段落插入完成");
}
}
}
隐藏Word文档中的段落
隐藏段落的实现原理
Word文档中隐藏段落可以通过设置段落的样式属性实现,核心是为段落添加一个隐藏样式,设置Vanish属性为true,这样段落内容在文档中就不会显示,但段落结构仍然保留在文档中。
实现代码示例
以下代码实现了隐藏指定文本内容的段落的功能:
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System.Linq;
namespace WordOperationDemo
{
class Program
{
static void Main(string[] args)
{
string filePath = @"D:test.docx";
using (WordprocessingDocument doc = WordprocessingDocument.Open(filePath, true))
{
Body body = doc.MainDocumentPart.Document.Body;
// 查找包含指定文本的段落,这里查找文本为"这是要隐藏的段落"的段落
Paragraph targetParagraph = body.Descendants<Paragraph>()
.FirstOrDefault(p => p.InnerText.Contains("这是要隐藏的段落"));
if (targetParagraph != null)
{
// 创建段落属性
ParagraphProperties paraProps = new ParagraphProperties();
// 创建隐藏样式属性
Vanish vanish = new Vanish();
// 将隐藏属性添加到段落属性中
paraProps.Append(vanish);
// 如果段落已有属性,先移除旧的属性
ParagraphProperties oldProps = targetParagraph.ParagraphProperties;
if (oldProps != null)
{
targetParagraph.RemoveChild(oldProps);
}
// 添加新的段落属性
targetParagraph.ParagraphProperties = paraProps;
// 保存修改
doc.MainDocumentPart.Document.Save();
}
}
Console.WriteLine("段落隐藏完成");
}
}
}
注意事项
- 操作Word文档时需要确保文档没有被其他进程占用,否则会抛出文件访问异常。
- 插入段落时可以同时设置字体、字号、对齐方式等样式,只需要在
Run元素下添加对应的属性节点即可。 - 隐藏段落只是视觉上不显示,段落的内容仍然保存在文档的XML结构中,如果需要彻底删除段落可以使用
Remove方法。