推荐一个跨平台支持Word, Excel, CSV, Email等30多种格式的操作库
更多开源项目请查看:一个专注推荐优秀.Net开源项目的榜单
在我们日常项目开发中,经常需要解析操作文档,比如Office文档、Email文件、PDF、Xml、图片、Mp3等音频文件,操作Office、PDF文件我们需要用到IFilter,操作文本、图片文件需要用到File,每一个文档格式都需要用到不同接口,或者引入不同的第三方插件。
今天给大家推荐一个开源库,这些文档格式通通支持,一网打尽,让我们不需要再关心这些文档底层操作。
项目简介
这是一个基于.Net开发的数据/文本操作开源项目,支持docx、xlsx、xls、pdf、csv、txt、epub、html等30多种格式,使用简单友好,是一个可以帮助我们识别文件格式,并将数据/文本提取为统一结构的智能框架。
支持文档格式有:
txt,xml,csv,xls,xlsx,ppt,vsd,pub,shw,sldprt,pptx,pubx,vsdx,doc,docx,rtf,pdf,html,htm,eml,msg,vcf,zip,mp3,ape,wma,flac,aif,jpeg,jpg,gif,tiff,png。

如上图所示,该项目对各种文件格式进行底层封装,我们只需专注业务的开发,不需要了解底层细节。
技术架构
1、跨平台:基于.Net Standard 2.0开发,支持Windows、Liunx、Mac。
项目结构

通过项目引入的包,我们可以清晰的看到,该项目实际上是针对不同文件格式,通过引用第三方包进行统一封装,比如使用NPOI进行解析Office文档、使用iText来解析PDF,使用TagLib解析MP3、Wav等音频文件。
使用方法
Word文档操作
//解析docx文档
ParserContext context = new ParserContext(TestDataSample.GetWordPath("SampleDoc.docx"));
IDocumentParser parser = ParserFactory.CreateDocument(context);
ToxyDocument doc = parser.Parse();
//获取段落的数量
Assert.AreEqual(7,doc.Paragraphs.Count);
//判断第一段落的文本
Assert.AreEqual("I am a test document",doc.Paragraphs[0].Text);
Excel文件操作
//解析xlsx文档
ParserContext context = new ParserContext(TestDataSample.GetExcelPath('text.xlsx'));
ISpreadsheetParser parser = ParserFactory.CreateSpreadsheet(context);
ToxySpreadsheet ss = parser.Parse();
//获取Excel表格数量与名称
Assert.AreEqual(3, ss.Tables.Count);
Assert.AreEqual("Sheet1", ss.Tables[0].Name);
Assert.AreEqual("Sheet2", ss.Tables[1].Name);
Assert.AreEqual("Sheet3", ss.Tables[2].Name);
//获取总行数
Assert.AreEqual(5, ss.Tables[0].Rows.Count);
Assert.AreEqual(0, ss.Tables[1].Rows.Count);
Assert.AreEqual(0, ss.Tables[2].Rows.Count);
//获取指定行数
ToxyTable table = ss.Tables[0];
Assert.AreEqual(1, table.Rows[0].RowIndex);
Assert.AreEqual(2, table.Rows[1].RowIndex);
Assert.AreEqual(3, table.Rows[2].RowIndex);
Assert.AreEqual(4, table.Rows[3].RowIndex);
Assert.AreEqual(5, table.Rows[4].RowIndex);
//获取总表格数
Assert.AreEqual(1, table.Rows[0].Cells.Count);
Assert.AreEqual(0, table.Rows[1].Cells.Count);
Assert.AreEqual(2, table.Rows[2].Cells.Count);
Assert.AreEqual(2, table.Rows[3].Cells.Count);
Assert.AreEqual(2, table.Rows[4].Cells.Count);
//获取指定表格的值
Assert.AreEqual("Employee Info", table.Rows[0].Cells[0].ToString());
Assert.AreEqual(1, table.Rows[0].Cells[0].CellIndex);
PDF文档操作
//解析PDF文档
string path = TestDataSample.GetPdfPath("Sample1.PDF");
var parser = new PDFDocumentParser(new ParserContext(path));
var result = parser.Parse();
//获取段落数
Assert.AreEqual(1474, result.Paragraphs.Count);
//判断第一段落的文本
Assert.AreEqual("LA MARCHE MONDIALE DES FEMMES", result.Paragraphs[0].Text);
图片文件操作
//解析jpg图片
string path = Path.GetFullPath(TestDataSample.GetImagePath("sample_sony1.jpg"));
ParserContext context = new ParserContext(path);
IMetadataParser parser = (IMetadataParser)ParserFactory.CreateMetadata(context);
ToxyMetadata x = parser.Parse();
//属性数量
Assert.AreEqual(12, x.Count);
//图片宽模式时间等信息
Assert.AreEqual(2592, x.Get("PhotoHeight").Value);
Assert.AreEqual(95, x.Get("PhotoQuality").Value);
Assert.AreEqual(3872, x.Get("PhotoWidth").Value);
Assert.AreEqual("DSLR-A200", x.Get("Model").Value);
Assert.AreEqual((uint)400, x.Get("ISOSpeedRatings").Value );
Assert.AreEqual(5.6, x.Get("FNumber").Value);
Assert.AreEqual((double)35, x.Get("FocalLength").Value );
Assert.AreEqual((uint)52, x.Get("FocalLengthIn35mmFilm").Value );
Assert.AreEqual(new DateTime(2009, 11, 21, 12, 39, 39), x.Get("DateTime").Value);
以上是部分文件格式的解析例子,更多功能,大家可以下载源码学习,针对每一种格式,都有非常详细的单元测试例子,看完例子完全不需要文档。
项目地址
- End -
文章首发于公众号【编程乐趣】,欢迎大家关注。

推荐一个跨平台支持Word, Excel, CSV, Email等30多种格式的操作库的更多相关文章
- ASP.NET Core2集成Office Online Server(OWAS)实现办公文档的在线预览与编辑(支持word\excel\ppt\pdf等格式)
Office Online Server是微软开发的一套基于Office实现在线文档预览编辑的技术框架(支持当前主流的浏览器,且浏览器上无需安装任何插件,支持word.excel.ppt.pdf等文档 ...
- [转发]ASP.NET Core2集成Office Online Server(OWAS)实现办公文档的在线预览与编辑(支持word\excel\ppt\pdf等格式)
转载自:https://www.cnblogs.com/Andre/p/9549874.html Office Online Server是微软开发的一套基于Office实现在线文档预览编辑的技术框架 ...
- 推荐一个不错的关于Excel数据统计分析的公众号
- 推荐一个json直接导出Excel的网站
https://wejson.cn/json2excel/
- 在线文档转换API word,excel,ppt等在线文件转pdf、png
在线文档转换API提供word,excel,ppt等在线文件转pdf.png等,文档:https://www.juhe.cn/docs/api/id/259 接口地址:http://v.juhe.cn ...
- Aspose是一个很强大的控件,可以用来操作word,excel,ppt等文件
Aspose是一个很强大的控件,可以用来操作word,excel,ppt等文件,用这个控件来导入.导出数据非常方便.其中Aspose.Cells就是用来操作Excel的,功能有很多.我所用的是最基本的 ...
- 推荐一个免费的生成词云(word cloud)的在线工具
"词云"这个概念由美国西北大学新闻学副教授.新媒体专业主任里奇·戈登(Rich Gordon)提出. "词云"就是对网络文本中出现频率较高的"关键词& ...
- Atitit.office word excel ppt pdf 的web在线预览方案与html转换方案 attilax 总结
Atitit.office word excel ppt pdf 的web在线预览方案与html转换方案 attilax 总结 1. office word excel pdf 的web预览要求 ...
- Word,Excel,pdf,txt等文件上传并提取内容
近期项目需求:1.要用到各种文件上传,下载. 2.并对文件进行搜索. 3.仅仅要文件里包括有搜索的内容,所有显示出来. 今天正好有时间整理一下,方便以后阅读,及对须要用到的朋友提供微薄之力.首先在实现 ...
- java 如何将 word,excel,ppt如何转pdf--jacob
问题:java 如果将 word,excel,ppt如何转pdf 我个人的观点:windows server下用 jacob; linux server下 用openoffice. PS:1.本文 ...
随机推荐
- Linux内存占用分析的几个方法,你知道几个?
0. 引言: 系统内存是硬件系统中必不可少的部分,定时查看系统内存资源运行情况,可以帮助我们及时发现内存资源是否存在异常占用,确保业务的稳定运行. 例如:定期查看公司的网站服务器内存使用情况,可以确保 ...
- CentOS7 压缩及打包的常用命令
gzip gzip 文件名 压缩文件 gzip -d 文件名 解压文件 gunzip 文件名 解压文件 gzip -1 #压缩级别 最高到9 默认是6级别 gzip -f # 强制覆盖同名压缩包 gz ...
- Ubuntu16.04使用命令行安装jdk1.8
在Ubuntu中安装jdk过于麻烦,有时设置不好可能就没有办法使用,卸载也难以卸载干净,所以这篇文章使用相对简单的命令行来安装jdk,只需简单的四个命令,省去许多麻烦,下面是方法. 进入Ubuntu打 ...
- portainer安装&升级
2024年4月15日 关于升级: 如果需要升级 Portainer,请按以下步骤操作: 使用以下命令列出所有镜像: docker ps -a 根据需要删除指定镜像: docker rm <镜像名 ...
- mysql外键设置失败踩坑记录
把表里面的数据清空再添加 原因 因为外键一定要对应外面那个表的数据,现在添加外键会导致这个外键的值为空,违反了键的非空约定 理解为已有的数据突然多出来个字段,但是不知道值是什么,那就为空了 主键和外键 ...
- 【YashanDB数据库】数据库运行正常,日志出现大量错误metadata changed
问题现象 客户在麒麟kylin v10 sp1环境上部署YashanDB,运行正常, 但是在巡检中发现run.log中有大量错误日志文件metadata changed,需要排查原因 问题单:前置机大 ...
- Centos7.9安装Docker和Docker compose
什么是docker环境 Docker环境是指在计算机中安装和配置了Docker引擎的运行环境.Docker是一种容器化平台,它提供了一种轻量级的虚拟化技术,能够将应用程序及其依赖项打包成一个独立的容器 ...
- attention, transformers
这啥呀,慢慢啃 Attention 最初来源于 NLP 机器翻译的 Sequence to Sequence 模型,早先的encoder-decoder结构随着句子长度增加翻译性能会下降,因为模型记不 ...
- Gaussdb: CN修复失败对openssl版本依赖问题处理
1.问题背景 GaussDB轻量化分布式集群安装完成后,进行openssh和openssl升级,现有环境openssh-8.2p1-9.p03.ky10.x86_64和openssl-1.1.1f-2 ...
- Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
#!/bin/bash # Cross-compile environment for Android on ARM64 and x86 # # Contents licensed under the ...