ClosedXML读取Excel文件

因项目需要,需要把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).

废话不多说,讲讲具体怎么用。


获取页(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来表示的。第二种更合适一些,更符合“表”的概念。




你可能感兴趣的:(C#)