您的位置:

C#读取Excel的几种方法详解

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功能。读者可以根据自己的实际需求选择最合适的方法。