C#调用FreeSpire.Office读取word数据的基本用法

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

相关推荐
friklogff1 小时前
【无标题】云端之C#:全面解析6种云服务提供商的SDK
开发语言·flask·c#
Java开发追求者2 小时前
在CSS中换行word-break: break-word和 word-break: break-all区别
前端·css·word
c#上位机2 小时前
C#事件的用法
java·javascript·c#
chnyi6_ya2 小时前
一些写leetcode的笔记
笔记·leetcode·c#
IT规划师3 小时前
C#|.net core 基础 - 扩展数组添加删除性能最好的方法
c#·.netcore·数组
时光追逐者3 小时前
分享6个.NET开源的AI和LLM相关项目框架
人工智能·microsoft·ai·c#·.net·.netcore
friklogff4 小时前
【C#生态园】提升C#开发效率:深入了解自然语言处理库与工具
开发语言·c#·区块链
__water12 小时前
『功能项目』回调函数处理死亡【54】
c#·回调函数·unity引擎
__water12 小时前
『功能项目』眩晕图标显示【52】
c#·unity引擎·动画事件
__water13 小时前
『功能项目』第二职业法师的平A【57】
c#·unity引擎·魔法球伤害传递