C# dotnet WPF 使用 OpenXml 解析 Excel 文件
2021/6/29 17:23:47
本文主要是介绍C# dotnet WPF 使用 OpenXml 解析 Excel 文件,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在 2013 微软开源了 OpenXml 解析库,在微软的 Excel 文档,使用的文档格式就是国际规范的 OpenXml 格式。这个格式有很多版本,详细请看百度。因为表格文稿使用的是 OpenXml 在 .NET 开发可以非常简单将 Excel 文档进行解析,大概只需要两句话
本文通过一个简单的 WPF 程序告诉大家如何解析,这个简单的 WPF 程序简单到仅有一个按钮,在点击按钮时自动解析 Excel 文档的内容
用 OpenXML 能做什么?其实可以做的东西很多,例如在 WPF 或 UWP 或 Xamarin 等里面使用 OpenXML 解析读取 Excel 文件内容,读取 PPT 和 Word 等文档的内容,只要符合 OpenXML 格式就能进行读取
通过 NuGet 安装 Openxml 库,这个库支持跨平台,因为只是解析数据
然后在按钮点击的代码里面添加下面代码解析
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using (SpreadsheetDocument doc = SpreadsheetDocument.Open(fs, false)) { } }
大概这样就解析完成了,上面代码的 fileName 就是传入的文件,如下面代码
string fileName = @"f:\lindexi\FurlalloganarBerkojelfarwiwa.xlsx";
在 Excel 里面有多个标签,下面代码是获取第一个标签
WorkbookPart workbookPart = doc.WorkbookPart; SharedStringTablePart sstpart = workbookPart.GetPartsOfType<SharedStringTablePart>().First(); SharedStringTable sst = sstpart.SharedStringTable; WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); Worksheet sheet = worksheetPart.Worksheet;
如果读取格子里面内容,可以使用下面代码
var cells = sheet.Descendants<Cell>(); var rows = sheet.Descendants<Row>(); Debug.WriteLine("Row count = {0}", rows.LongCount()); Debug.WriteLine("Cell count = {0}", cells.LongCount()); // One way: go through each cell in the sheet foreach (Cell cell in cells) { if ((cell.DataType != null) && (cell.DataType == CellValues.SharedString)) { int ssid = int.Parse(cell.CellValue.Text); string str = sst.ChildElements[ssid].InnerText; Debug.WriteLine("Shared string {0}: {1}", ssid, str); } else if (cell.CellValue != null) { Debug.WriteLine("Cell contents: {0}", cell.CellValue.Text); } } // Or... via each row foreach (Row row in rows) { foreach (Cell c in row.Elements<Cell>()) { if ((c.DataType != null) && (c.DataType == CellValues.SharedString)) { int ssid = int.Parse(c.CellValue.Text); string str = sst.ChildElements[ssid].InnerText; Debug.WriteLine("Shared string {0}: {1}", ssid, str); } else if (c.CellValue != null) { Debug.WriteLine("Cell contents: {0}", c.CellValue.Text); } } }
如果想要了解解析的每个对象的内容,我推荐在对应的代码添加断点,如想要了解 row 的值等,可以如下图添加一个断点,然后通过局部变量窗口就可以看到每个变量的值
代码放在 github 欢迎小伙伴访问
如何添加断点请看 VisualStudio 断点调试详解
除了使用 OpenXML SDK 这个免费的库之外,还可以使用 EPPlus 这个收费或 LGPL 的库
我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。
如果在博客看到有任何不懂的,欢迎交流
这篇关于C# dotnet WPF 使用 OpenXml 解析 Excel 文件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具