Excel是一个非常常见的工作软件,我们在日常生活中难免要接触到它。而C#作为一种常用的编程语言,也经常需要与Excel进行交互。在本篇文章中,我们将从多个方面结合代码来详细介绍C#读取Excel的几种方法,便于大家在实际工作中使用。
一、使用Microsoft.Office.Interop.Excel
使用Microsoft.Office.Interop.Excel是最常见的方法之一,它可以帮助我们直接读取和操作Excel文件。我们需要引用Microsoft.Office.Interop.Excel的COM组件,并添加一些命名空间后,便可以使用相关的类和方法。下面是一个示例代码:
using Excel = Microsoft.Office.Interop.Excel; public void ReadExcel(string filePath) { Excel.Application excelApp = new Excel.Application(); Excel.Workbook workbook = excelApp.Workbooks.Open(filePath); Excel.Worksheet worksheet = workbook.Sheets[1]; Excel.Range range = worksheet.UsedRange; // 读取每一行每一列的数据 for (int row = 1; row <= range.Rows.Count; row++) { for (int col = 1; col <= range.Columns.Count; col++) { string cellValue = range.Cells[row, col].Value.ToString(); Console.WriteLine("第{0}行第{1}列的值:{2}", row, col, cellValue); } } workbook.Close(); excelApp.Quit(); }
在这个示例中,我们通过Excel.Application对象创建了一个Excel应用程序实例,并使用它打开了一个指定路径下的Excel文件。然后,我们选择了Excel文件中的第一个工作表,并使用UsedRange属性获取了它的数据区域。最后,我们通过两个for循环依次遍历每一行每一列,读取相应的单元格的值,并输出到控制台。
二、使用OleDbConnection
OleDbConnection也是常用的一种读取Excel文件的方法。这个方法使用了OLE DB技术,可以通过一些简单的代码就可以实现数据的读取。下面是示例代码:
using System.Data.OleDb; public void ReadExcel(string filePath) { string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1;'"; using (OleDbConnection conn = new OleDbConnection(connString)) { conn.Open(); OleDbCommand command = new OleDbCommand("SELECT * FROM [Sheet1$]", conn); OleDbDataReader reader = command.ExecuteReader(); // 读取每一行每一列的数据 while (reader.Read()) { for (int i = 0; i < reader.FieldCount; i++) { Console.WriteLine(reader[i]); } } } }
在这个示例中,我们首先创建了一个连接到Excel文件的连接字符串,然后使用OleDbConnection对象连接到该文件。接着,我们使用SQL语句“SELECT * FROM [Sheet1$]”读取第一个工作表中的全部数据,得到一个OleDbDataReader对象。最后,我们通过一个while循环遍历每一行,并通过for循环遍历每一列,分别输出到控制台。
三、使用EPPlus
EPPlus是一个第三方的开源库,专门用于读写Excel文件,比较适合用于大数据量Excel文件的读写操作。下面是一个使用EPPlus读取Excel文件并输出其内容的示例代码:
using OfficeOpenXml; public void ReadExcel(string filePath) { using (ExcelPackage package = new ExcelPackage(new FileInfo(filePath))) { ExcelWorksheet worksheet = package.Workbook.Worksheets[1]; // 读取每一行每一列的数据 for (int row = worksheet.Dimension.Start.Row; row <= worksheet.Dimension.End.Row; row++) { for (int col = worksheet.Dimension.Start.Column; col <= worksheet.Dimension.End.Column; col++) { object cellValue = worksheet.Cells[row, col].Value; if (cellValue != null) { Console.WriteLine("第{0}行第{1}列的值:{2}", row, col, cellValue.ToString()); } } } } }
在这个示例中,我们首先使用ExcelPackage打开指定路径下的Excel文件。然后,我们选择了Excel文件中的第一个工作表,并使用Dimension属性获取了它的真实数据区域。最后,我们通过两个for循环依次遍历每一行每一列,读取相应的单元格的值,并输出到控制台。
四、使用NPOI
NPOI是一个开源的.NET类库,可以用于读写Microsoft Office系列的文件,包括Excel。NPOI相对于Microsoft.Office.Interop.Excel和OleDbConnection的优势在于,它可以在未安装Excel的系统中使用,并且文件大小的限制较小。下面是一个使用NPOI读取Excel文件的示例代码:
using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; public void ReadExcel(string filePath) { using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { IWorkbook workbook = new XSSFWorkbook(fs); ISheet worksheet = workbook.GetSheetAt(0); // 读取每一行每一列的数据 for (int row = 0; row <= worksheet.LastRowNum; row++) { IRow currentRow = worksheet.GetRow(row); for (int col = 0; col < currentRow.LastCellNum; col++) { ICell currentCell = currentRow.GetCell(col); if (currentCell != null) { string cellValue = currentCell.ToString(); Console.WriteLine("第{0}行第{1}列的值:{2}", row + 1, col + 1, cellValue); } } } } }
在这个示例中,我们首先使用FileStream打开指定路径下的Excel文件。然后,我们使用XSSFWorkbook和ISheet对象分别表示整个Excel文件和它的第一个工作表。接着,我们通过两个for循环依次遍历每一行每一列,读取相应的单元格的值,并输出到控制台。
五、使用Spire.XLS
Spire.XLS是另一个免费的.NET类库,用于读写Excel文件。使用它可以快速读取和操作Excel文件,并支持大多数Excel功能。下面是一个使用Spire.XLS读取Excel文件的示例代码:
using Spire.Xls; public void ReadExcel(string filePath) { Workbook workbook = new Workbook(); workbook.LoadFromFile(filePath); Worksheet worksheet = workbook.Worksheets[0]; // 读取每一行每一列的数据 for (int row = 1; row <= worksheet.LastRow; row++) { for (int col = 1; col <= worksheet.LastColumn; col++) { CellRange range = worksheet[row, col]; if (range.Value != null) { Console.WriteLine("第{0}行第{1}列的值:{2}", row, col, range.Value); } } } }
在这个示例中,我们首先使用WorkBook打开指定路径下的Excel文件。然后,我们选择了Excel文件中的第一个工作表,并使用LastRow和LastColumn属性获取它的真实数据区域。最后,我们通过两个for循环依次遍历每一行每一列,读取相应的单元格的值,并输出到控制台。
总结
通过上述的几个示例代码,我们可以看到使用C#读取Excel文件有多种方法,其中Microsoft.Office.Interop.Excel和OleDbConnection比较常见但需要安装Excel,EPPlus适用于大数据量Excel文件的读写操作,NPOI可以在未安装Excel的系统中使用,Spire.XLS支持大多数Excel功能。读者可以根据自己的实际需求选择最合适的方法。