目录,是指书籍、文档正文前所载的目次,将主要内容以一定次第顺序编排,起指导阅读、检索内容的作用。在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目录——生成、删除目录的更多相关文章

  1. Python操作Word批量生成文章

    需要做一些会议记录.总共有多少呢?五个地点x7个月份x每月4篇=140篇.虽然不很重要,但是140篇记录完全雷同也不好.大体看了一下,此类的记录大致分为四段.于是决定每段提供四种选项,每段从四选项里随 ...

  2. Word目录生成

    之所以写这篇文章,是因为每次写报告都需要生成相应目录,但常常只记得个大概,最终还得要重新百度,十分头疼,故在此记录一下. 大概分为3个步骤 步骤1 设置标题级数 进入大纲模式 选择相应级数,这里选的是 ...

  3. Aspose.Words操作word生成PDF文档

    Aspose.Words操作word生成PDF文档 using Aspose.Words; using System; using System.Collections.Generic; using ...

  4. VBA操作word生成sql语句

    项目开始一般都是用word保存下数据库的文档 但是从表单一个一个的建表实在是很困难乏味,查查资料 1.可以生成一个html或者xml,检索结构生成sql.但是这个方式也蛮麻烦 2.查到vba可以操作w ...

  5. Python操作Word【批量生成文章】

    http://www.cnblogs.com/codex/p/4668396.html 需要做一些会议记录.总共有多少呢?五个地点x7个月份x每月4篇=140篇.虽然不很重要,但是140篇记录完全雷同 ...

  6. DocX操作word生成报表

    1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱尔兰的一个叫Cathal Coffey的博士生开发出来的.DocX使得操作w ...

  7. C# 处理Word自动生成报告 三、设计模板

    C# 处理Word自动生成报告 一.概述 C# 处理Word自动生成报告 二.数据源例子 C# 处理Word自动生成报告 三.设计模板 C# 处理Word自动生成报告 四.程序处理 既然是模板就少不了 ...

  8. C#操作Word Aspose.Words组件介绍及使用—基本介绍与DOM概述

    1.基本介绍 Aspose.Words是一个商业.NET类库,可以使得应用程序处理大量的文件任务.Aspose.Words支持Doc,Docx,RTF,HTML,OpenDocument,PDF,XP ...

  9. Asp.net操作Word文档,原来这么简单啊!

    引用Word对象库文件  具体做法是打开菜单栏中的项目>添加引用>浏览,在打开的“选择组件”对话框中找到MSWORD.OLB后按确定即可引入此对象库文件,vs.net将会自动将库文件转化为 ...

随机推荐

  1. 3d轮播图——类似酷狗的轮播

    说到轮播图,其实只要是跟web开发相关的无论是前端后端应该都不陌生,各种各样的轮播图,从以前的单纯的平面山水画遮盖滑动或滚动,到Jquery的animate甚至是h5+css3,各种炫酷的轮播图更是层 ...

  2. mysql 中 character set 与 collation 的理解

    character set 和 collation 的是什么? character set, 即字符集. 我们常看到的 utf-8, GB2312, GB18030 都是相互独立的 character ...

  3. Linux用户登录日志查询

    # 1 utmp.wtmp.btmp文件 Linux用户登录信息放在三个文件中: 1 /var/run/utmp:记录当前正在登录系统的用户信息,默认由who和w记录当前登录用户的信息,uptime记 ...

  4. Python web(Django)连接Sql server

    (开开心心每一天~ ---虫瘾师) Python Web(Django) 与SQL SERVRE的连接----Come QQ群:607021567(里面有很多开源代码和资料,并且python的游戏也有 ...

  5. Reactor模式的.net版本简单实现--DEMO

    近期在学习DotNetty,遇到不少的问题.由于dotnetty是次netty的.net版本的实现.导致在网上叙述dotnetty的原理,以及实现技巧方面的东西较少,这还是十分恼人的.在此建议学习和使 ...

  6. rabbitmq 脑裂(网络分区)

    1.产生的原因 https://blog.csdn.net/zyz511919766/article/details/45198055 2.相关配置.如何规避 https://blog.csdn.ne ...

  7. 第四天 Java语言基础

    一.函数的概念 1)什么函数 函数就是定义在类中的具有特定功能的一段独立小程序,并能被多次使用. 2)问题引入 在昨天讲述使用循环嵌套画出矩形.但有问题,每次要画矩形都要写很多重复性的代码,能不能将这 ...

  8. BZOJ_4813_[Cqoi2017]小Q的棋盘_dfs

    BZOJ_4813_[Cqoi2017]小Q的棋盘_dfs Description 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能 在有连线的格 ...

  9. BZOJ_4551_[Tjoi2016&Heoi2016]树_树剖+线段树

    BZOJ_4551_[Tjoi2016&Heoi2016]树_树剖+线段树 Description 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为 ...

  10. 【游戏开发】小白学Lua——从Lua查找表元素的过程看元表、元方法

    引言 在上篇博客中,我们简单地学习了一下Lua的基本语法.其实在Lua中有一个还有一个叫元表的概念,不得不着重地探讨一下.元表在实际地开发中,也是会被极大程度地所使用到.本篇博客,就让我们从Lua查找 ...