FreeSpire.Office是Spire.Office的免费版本,后者支持全面、复杂的office文件操作功能,包括文件格式转换、文档操作、文档打印等,详细介绍见下图及参考文献1。本文学习FreeSpire.Office的基本用法并用其获取word文档的基本信息。
新建Winform项目,在Nuget包管理器中搜索并安装FreeSpire.Office,直接安装FreeSpire.Doc也可以。
主要使用Spire.Doc.Document类读取、创建、操作word文档,由于Document类属性多、函数多、结构复杂、对象嵌套关系不少,本文仅介绍其中的少部分内容。
Document类支持从word文档、HTML、Rtf、文件流等多源形式读取数据,提供LoadFromFile、LoadText、LoadHTML、LoadRtf等多种形式的加载函数,本文中使用LoadFromFile加载word文档。
本文学习Document类结构的过程中主要看到及使用的属性及函数如下图所示,下面逐一进行概述:
Document类 :
1)Background属性保存文档的背景设置信息;
2)Bookmarks属性保存文档的书签信息;
3)ChildObjects属性保存直属文档的对象信息,可以是章节、文本、图片等各种类型的对象;
4)Comments属性保存文档的批注信息;
5)PageCount属性保存文档的总页数;
6)Sections属性保存文档的所有节信息,在word文档中插入分节符就会增加Section对象;
7)Styles属性保存文档所有可用的样式信息,如正文、标题1、标题2等样式;
8)Watermark属性保存文档的水印设置信息。
Section类 :
1)ChildObjects属性保存直属当前节的对象信息;
2)Columns属性保存当前节的分栏信息;
3)HeadersFooters属性保存当前节的页眉页脚信息;
4)PageSetup属性保存当前节的页面设置信息;
5)Paragraphs属性保存当前节的段落信息;
6)Tables属性保存当前节的表格信息。
Paragraph类 ,Spire.Office中的段落属于通用段落概念,段落中既包含文字,也能包含表格、图片等数据,这些数据都会保存在段落的ChildObjects属性中,并通过每个DocumentObject对象实例的DocumentObjectType属性区分具体的对象类型。
1)CharCount属性保存当前段落的字符数(不含空格);
2)CharCountIncludeSpace属性保存当前段落的字符数(含空格);
3)ChildObjects属性保存当前段落直属的对象集合;
4)GetStyle()函数获取当前段落使用的样式信息,可以通过样式名称判断当前段落是正文、标题或其它形式的数据;
5)Text属性保存当前段落的文本内容;
6)WordCount属性保存当前段落的字数。
本文最初想读取word文档的导航标题结构,不过暂时没有看到Document类中是否有属性或函数可以直接获取标题信息,根据参考文献4中的说明,可以通过遍历所有段落的样式名称,如果为标题1、标题2或其它约定的样式名称,则认为该段落为标题,这种方式的代码实现也不复杂,如下所示:
csharp
using Document doc = new Document();
doc.LoadFromFile(txtFilePath.Text);
txtResult.Text = $"总页数:{doc.PageCount}";
for(int i=0;i<doc.Sections.Count;i++)
{
txtResult.Text += $"\r\n第{i + 1}节:";
for(int j = 0; j < doc.Sections[i].Paragraphs.Count;j++)
{
txtResult.Text += $"\r\n\t第{j + 1}段:样式名{doc.Sections[i].Paragraphs[j].GetStyle().Name}";
}
}
除了继续学习FreeSpire.Office的基本用法,后续还会学习其它word操作模块(如Aspose.Words、NPOI等),看是否有方便读取word文档标题或导航的方式。
参考文献:
[1]https://www.e-iceblue.com/Tutorials.html
[2]https://blog.csdn.net/lajigao/article/details/81236311
[3]ttps://www.cnblogs.com/Fooo/p/15601912.html
[4]https://blog.csdn.net/weixin_42727550/article/details/115915561