C# 操作Word目录——生成、删除目录
目录,是指书籍、文档正文前所载的目次,将主要内容以一定次第顺序编排,起指导阅读、检索内容的作用。在Word中生成目录前,需要设置文档相应文字或者段落的大纲级别,根据设定的大纲级别可创建文档的交互式大纲,即在Word文档左侧导航窗口中可显示为如同目录的标题大纲,通过点击相应级别的内容,可跟踪阅读位置或者快速移动相应的文档内容。下面将介绍如何通过C# 编程操作Word目录。
生目录时,这里考虑两种情况:
- 文档没有设置大纲级别,生成目录时需手动设置
- 文档已有大纲级别,此时,通过使用域代码来创建目录
使用工具:Free Spire.Doc for .NET(免费版)
dll文件引用:
安装后,注意在程序中添加引用Spire.Doc.dll(dll可在安装路径下的bin文件夹中获取)

一、生成目录
(1)手动设置大纲级别,生成目录
step1:加载文档
Document doc = new Document();
doc.LoadFromFile("test.docx");
step2:在文档正文前插入一个新的段落
Paragraph paraInserted = new Paragraph(doc);
TextRange textRange = paraInserted.AppendText("目 录");
textRange.CharacterFormat.Bold = true;
textRange.CharacterFormat.TextColor = Color.CadetBlue;
doc.Sections[].Paragraphs.Insert(, paraInserted);
paraInserted.Format.HorizontalAlignment = HorizontalAlignment.Center;
step3:插入目录
doc.Sections[].Paragraphs[].AppendTOC(,);
step4:设置指定段落的大纲级别
doc.Sections[].Paragraphs[].ApplyStyle(BuiltinStyle.Heading1);
doc.Sections[].Paragraphs[].ApplyStyle(BuiltinStyle.Heading2);
doc.Sections[].Paragraphs[].ApplyStyle(BuiltinStyle.Heading2);
doc.Sections[].Paragraphs[].ApplyStyle(BuiltinStyle.Heading2);
doc.Sections[].Paragraphs[].ApplyStyle(BuiltinStyle.Heading1);
doc.Sections[].Paragraphs[].ApplyStyle(BuiltinStyle.Heading1);
step5:更新目录
doc.UpdateTableOfContents();
step6:保存文档
doc.SaveToFile("result.docx", FileFormat.Docx2010);
目录生成效果:

全部代码:
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Drawing; namespace CreateToc_Doc
{
class Program
{
static void Main(string[] args)
{
//创建Document对象,加载Word文档
Document doc = new Document();
doc.LoadFromFile("sample.docx"); //插入一个段落作为第一段
Paragraph paraInserted = new Paragraph(doc);
TextRange textRange = paraInserted.AppendText("目 录");
textRange.CharacterFormat.Bold = true;
textRange.CharacterFormat.TextColor = Color.CadetBlue;
doc.Sections[].Paragraphs.Insert(, paraInserted);
paraInserted.Format.HorizontalAlignment = HorizontalAlignment.Center; //在第一段添加目录表
doc.Sections[].Paragraphs[].AppendTOC(, ); //设置指定段落的大纲级别
doc.Sections[].Paragraphs[].ApplyStyle(BuiltinStyle.Heading1);
doc.Sections[].Paragraphs[].ApplyStyle(BuiltinStyle.Heading2);
doc.Sections[].Paragraphs[].ApplyStyle(BuiltinStyle.Heading2);
doc.Sections[].Paragraphs[].ApplyStyle(BuiltinStyle.Heading2);
doc.Sections[].Paragraphs[].ApplyStyle(BuiltinStyle.Heading1);
doc.Sections[].Paragraphs[].ApplyStyle(BuiltinStyle.Heading1); //更新目录
doc.UpdateTableOfContents(); //保存文档
doc.SaveToFile("result.docx", FileFormat.Docx2010);
System.Diagnostics.Process.Start("result.docx");
}
}
}
(2)使用域代码生成目录
在(1)中,step3之前添加一个step
TableOfContent toc = new TableOfContent(doc, "{\\o \"1-3\" \\h \\z \\u}");
并省略step4,即可。
目录生成效果:

全部代码:
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Drawing; namespace CreateToc_Doc
{
class Program
{
static void Main(string[] args)
{
//创建Document对象,加载Word文档
Document doc = new Document();
doc.LoadFromFile("sample.docx"); //插入一个段落作为第一段
Paragraph paraInserted = new Paragraph(doc);
TextRange textRange = paraInserted.AppendText("目 录");
textRange.CharacterFormat.Bold = true;
textRange.CharacterFormat.TextColor = Color.CadetBlue;
doc.Sections[].Paragraphs.Insert(, paraInserted);
paraInserted.Format.HorizontalAlignment = HorizontalAlignment.Center; //使用域代码自定义目录
TableOfContent toc = new TableOfContent(doc, "{\\o \"1-3\" \\h \\z \\u}");
doc.Sections[].Paragraphs[].AppendTOC(, );
//更新目录
doc.UpdateTableOfContents(); //保存文档
doc.SaveToFile("output.docx", FileFormat.Docx2010);
System.Diagnostics.Process.Start("output.docx");
}
}
}
二、删除目录
using Spire.Doc;
using System.Text.RegularExpressions; namespace RemoveTOC_Doc
{
class Program
{
static void Main(string[] args)
{
//创建Document对象,并加载含有目录的Word文档
Document doc = new Document();
doc.LoadFromFile("Result.docx", FileFormat.Docx2010); //获取body
Body body = doc.Sections[].Body; //移除目录
Regex regex = new Regex("TOC\\w+");
for (int i = ; i < body.Paragraphs.Count; i++)
{
if (regex.IsMatch(body.Paragraphs[i].StyleName))
{
body.Paragraphs.RemoveAt(i);
i--;
}
} //保存文档
doc.SaveToFile("RemoveTOC.docx", FileFormat.Docx2010);
System.Diagnostics.Process.Start("RemoveTOC.docx");
}
}
}
运行程序,生成的文档中,目录已经被删除。
(本文完)
转载注明出处!
C# 操作Word目录——生成、删除目录的更多相关文章
- Python操作Word批量生成文章
需要做一些会议记录.总共有多少呢?五个地点x7个月份x每月4篇=140篇.虽然不很重要,但是140篇记录完全雷同也不好.大体看了一下,此类的记录大致分为四段.于是决定每段提供四种选项,每段从四选项里随 ...
- Word目录生成
之所以写这篇文章,是因为每次写报告都需要生成相应目录,但常常只记得个大概,最终还得要重新百度,十分头疼,故在此记录一下. 大概分为3个步骤 步骤1 设置标题级数 进入大纲模式 选择相应级数,这里选的是 ...
- Aspose.Words操作word生成PDF文档
Aspose.Words操作word生成PDF文档 using Aspose.Words; using System; using System.Collections.Generic; using ...
- VBA操作word生成sql语句
项目开始一般都是用word保存下数据库的文档 但是从表单一个一个的建表实在是很困难乏味,查查资料 1.可以生成一个html或者xml,检索结构生成sql.但是这个方式也蛮麻烦 2.查到vba可以操作w ...
- Python操作Word【批量生成文章】
http://www.cnblogs.com/codex/p/4668396.html 需要做一些会议记录.总共有多少呢?五个地点x7个月份x每月4篇=140篇.虽然不很重要,但是140篇记录完全雷同 ...
- DocX操作word生成报表
1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱尔兰的一个叫Cathal Coffey的博士生开发出来的.DocX使得操作w ...
- C# 处理Word自动生成报告 三、设计模板
C# 处理Word自动生成报告 一.概述 C# 处理Word自动生成报告 二.数据源例子 C# 处理Word自动生成报告 三.设计模板 C# 处理Word自动生成报告 四.程序处理 既然是模板就少不了 ...
- C#操作Word Aspose.Words组件介绍及使用—基本介绍与DOM概述
1.基本介绍 Aspose.Words是一个商业.NET类库,可以使得应用程序处理大量的文件任务.Aspose.Words支持Doc,Docx,RTF,HTML,OpenDocument,PDF,XP ...
- Asp.net操作Word文档,原来这么简单啊!
引用Word对象库文件 具体做法是打开菜单栏中的项目>添加引用>浏览,在打开的“选择组件”对话框中找到MSWORD.OLB后按确定即可引入此对象库文件,vs.net将会自动将库文件转化为 ...
随机推荐
- my views--软件工程、python
这是大三第二学期开的一门课,由吴世枫老师和王韬助教教的. 大一开了C语言,大二开了java.matlab,而用得最多的应该是学java顺便学会的C++了.matlab在实训和数学建模用了多次,尤其是数 ...
- 登录测试用例sql语句注入
利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读 ...
- struts升级2.3.12到2.5.13
参考文章: http://www.ituring.com.cn/article/495914 http://blog.csdn.net/zhangchen1987/article/details/78 ...
- Python《学习手册:第二章-习题》
什么是Python解释器? Python解释器是运行Python程序的程序. 什么是源代码? 源代码是为程序所写的语句:它包括文本文件(通常以.py为文件名结尾)的文件. 什么是字节码? 字节码是Py ...
- 网络营销行业十大看了就想吐的“滥词”
网络营销行业在国内的互联网界已"猖獗"数年之久,它是一个让企业爱让用户恨的行业.有互联网的地方,就有网络营销的机会,有了机会就有了相关产业的存在,只不过是业大业小的问题.但是随着互 ...
- RestTemplate的设置及使用
概述 RestTemplate是spring内置的http请求封装,在使用spring的情况下,http请求直接使用RestTemplate是不错的选择. Rest服务端 使用RestTemplate ...
- SSM-SpringMVC-17:SpringMVC中深度剖析HandlerAdapter处理器适配器底层
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 先放一张图 很熟悉啊,之前就看过,我们之前已经把handlerMapping剖了个底朝天,顺着上次的进度,继 ...
- 《Linux/Unix系统编程手册》 时间子系统
Linux下操作系统编程有两本经典APUE即<Advanced Programming in the UNIX Environment>和TLPI<The Linux Program ...
- 数据结构 之 二叉堆(Heap)
注:本节主要讨论最大堆(最小堆同理). 一.堆的概念 堆,又称二叉堆.同二叉查找树一样,堆也有两个性质,即结构性和堆序性. 1.结构性质: 堆是一棵被完全填满的二叉树,有可能的 ...
- js算法初窥02(排序算法02-归并、快速以及堆排序)
上一篇,我们讲述了一些简单的排序算法,其实说到底,在前端的职业生涯中,不涉及node.不涉及后台的情况下,我目前还真的没想到有哪些地方可以用到这些数据结构和算法,但是我在前面的文章也说过了.或许你用不 ...