ClosedXML读取Excel文件
2015-11-27 18:45
1566 查看
因项目需要,需要把Excel里面的数据整合处理一下,文件多,而且文件内容较大,所以希望实现自动化。问了下师兄,他介绍说ClosedXML比较好用。安装过程就不细说了,使用Visual Studio的NuGet一键安装即可。
ClosedXML就是一个类库,用于开发windows组件。它是在微软的类库OpenXML的基础上封装而成的,所以在实际项目中除了添加ClosedXML.dll引用,还需要添加DocumentFormat.OpenXML.dll的引用。当然,NuGet会检查依赖关系,帮你完成上面的添加引用步骤。ClosedXML的功能,引用官网的一句话介绍其功能:
ClosedXML makes it easier for developers to create Excel 2007/2010 files. It provides a nice object oriented way to manipulate
the files (similar to VBA) without dealing with the hassles of XML Documents. It can be used by any .NET language like C# and Visual Basic (VB).
废话不多说,讲讲具体怎么用。
public IXLWorksheet Worksheet(int position);
public IXLWorksheet Worksheet(string name);
第一种方式通过页的位置,也就是顺序来获取Sheet,一般第一页对应的参数为1;后一种通过页名来获取,具体使用哪一种当然要视情况而定。例如,需要遍历Excel文件中的所有内容时,第一种明显更好;如果是定位到某一页,第二种可能更恰当。单元格集合是在Sheet中的,所以要想访问数据,获取页是第一步。
rowUsedCount = LastRowUsed().RowNumber() - FirstRowUsed().RowNumber()
ColumnUsedCount = LastColumnUsed().ColumnNumber() - FirstColumnUsed().ColumnNumber()
IXLCell Cell(string cellAddressInRange);
IXLCell Cell(int row, int column);
IXLCell Cell(int row, string column);
第一种是通过单元格符号来读取,比如“A1”、“B1”之类的;第二种通过行列的位置来读取如第三行第一列为Cell(3, 1);第三种就是二者的综合,因为在Excel里面,行是用数字表示的,而列则是用ABCD来表示的。第二种更合适一些,更符合“表”的概念。
ClosedXML就是一个类库,用于开发windows组件。它是在微软的类库OpenXML的基础上封装而成的,所以在实际项目中除了添加ClosedXML.dll引用,还需要添加DocumentFormat.OpenXML.dll的引用。当然,NuGet会检查依赖关系,帮你完成上面的添加引用步骤。ClosedXML的功能,引用官网的一句话介绍其功能:
ClosedXML makes it easier for developers to create Excel 2007/2010 files. It provides a nice object oriented way to manipulate
the files (similar to VBA) without dealing with the hassles of XML Documents. It can be used by any .NET language like C# and Visual Basic (VB).
废话不多说,讲讲具体怎么用。
获取页(Sheet)
首先简单介绍两个类XLWorkbook和IXLWorksheet,分别对应着OpenXML里面的Workbook和Worksheet。XLWorkbook对应着你要访问的Excel文件,一个XLWorkbook会有一个IXLWorksheet集——IXLWorksheets,IXLWorksheet和Excel文件里面的Sheet是对应的。我们知道,一个Excel中可能会包含着很多个Sheet,XLWorkbook类中可以通过两种方式获取想要访问的页:public IXLWorksheet Worksheet(int position);
public IXLWorksheet Worksheet(string name);
第一种方式通过页的位置,也就是顺序来获取Sheet,一般第一页对应的参数为1;后一种通过页名来获取,具体使用哪一种当然要视情况而定。例如,需要遍历Excel文件中的所有内容时,第一种明显更好;如果是定位到某一页,第二种可能更恰当。单元格集合是在Sheet中的,所以要想访问数据,获取页是第一步。
读取数据范围
当你用对象浏览器查看上文中IXLWorksheet类时,似乎觉得RowCount()和ColumnCount()这两个方法是来获取最大行数和列数的,但经过测试发现,这两个值往往都很大,包含了你没有存放数据的范围。后来查了一下类成员,发现了FirstRowUsed()这个函数,函数说明为“Gets the first row of the worksheet that contains a cell with a value”,紧接着就果然又发现了LastRowUsed()这个函数。简单测试了下,二者确实表示了包围所有数据的最大矩形的位置,所以包含数据的表范围是:rowUsedCount = LastRowUsed().RowNumber() - FirstRowUsed().RowNumber()
ColumnUsedCount = LastColumnUsed().ColumnNumber() - FirstColumnUsed().ColumnNumber()
读取单元格数据
读取单元格数据有三种方式:IXLCell Cell(string cellAddressInRange);
IXLCell Cell(int row, int column);
IXLCell Cell(int row, string column);
第一种是通过单元格符号来读取,比如“A1”、“B1”之类的;第二种通过行列的位置来读取如第三行第一列为Cell(3, 1);第三种就是二者的综合,因为在Excel里面,行是用数字表示的,而列则是用ABCD来表示的。第二种更合适一些,更符合“表”的概念。
相关文章推荐
- 使用Python生成Excel格式的图片
- c#调用COM组件
- Excel 曝出 Power Query 安全漏洞,1.2 亿用户易受远程 DDE 攻击
- VBA将excel数据表生成JSON文件
- excel vba 限制工作表的滚动区域代码
- excel vba 高亮显示当前行代码
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法