C#读取Excel内容示例分享

栗子
栗子
发布时间:2026-10-14 | 6人浏览过
原创

本文介绍在.NET开发环境中,使用OleDb连接器以SQL查询方式读取旧版.xls格式Excel文件的完整实现方案。通过提供一段可直接运行的C#控制台程序示例,涵盖了引入必要的命名空间、配置连接字符串、检索Sheet列表以及获取数据至DataTable对象的核心步骤,适用于需要简单读取电子表格数据的场景。

基于OLEDB的Excel数据读取原理

在C#中处理Excel文件(尤其是旧的 .xls 格式)时,一种无需依赖庞大的Office COM库或第三方DLL的轻量级方案是使用 OleDbConnection 将Excel视为数据库进行查询。这种方法要求安装Microsoft Jet引擎,并且适合只需要读取静态表格数据的场景。相比操作 Microsoft.Office.Interop.Excel.dll,这种方式更稳定且不易受Office版本兼容性问题的影响。

核心操作步骤

第1步:添加必要引用

虽然示例代码直接使用了命名空间,但在实际的Visual Studio项目中,首先需要确保项目引用了以下系统库:

  • System.Data:用于核心的 DataSet 和 DataTable 类型。
  • System.Data.OleDb:提供连接和操作OLE DB数据源的能力。

第2步:构建连接与查询逻辑

以下代码片段展示了如何编写一个名为 ExcelToDataSet 的方法,该方法负责接收Excel文件路径并返回一个包含数据的 DataTable。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Diagnostics;

namespace ReadExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileName = @"D:\TransferPlant\111.xls";
            DataTable dt = ExcelToDataSet(fileName);
            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Console.WriteLine(dt.Rows[i][0].ToString());
                }
            }
        }

        static public DataTable ExcelToDataSet(string filename)
        {
            // 定义Excel 8.0 (.xls)的连接字符串
            string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = "+filename+";Extended Properties=Excel 8.0";
            OleDbConnection conn = new OleDbConnection(strCon);
            conn.Open();
            
            // 获取Excel文件中所有工作表(Sheet)的名称
            DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
            string[] strTableNames = new string[dtSheetName.Rows.Count];
            
            for (int k = 0; k < dtSheetName.Rows.Count; k++)
            {
                strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString();
            }
            
            // 默认读取第一个Sheet的数据
            string strExcel = "select * from [" + strTableNames[0] + "]";
            OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strCon);
            DataTable dt = new DataTable();
            myCommand.Fill(dt);

            return dt;
        }
    }
}

第3步:解析运行结果

当程序执行时,它会根据指定的文件路径连接到对应的Excel文档。通过 GetOleDbSchemaTable API,我们可以动态获取该Excel内所有的Sheet名称,从而避免硬编码Sheet名导致的路径报错。随后,示例构建了 SELECT * 查询语句来获取指定Sheet的全部记录,最终将数据填充至内存中的 DataTable 结构里。调用方只需检查 Rows.Count 即可判断是否有有效数据。

注意事项

上述方法主要依赖于 Microsoft.Jet.OLEDB.4.0 驱动,这在64位操作系统上可能遇到兼容性问题。如果在64位环境下部署,可能需要切换到 Microsoft.ACE.OLEDB.12.0 驱动并确保已安装AccessDatabaseEngine。此外,此方案仅支持传统的 .xls 格式,若需处理 .xlsx,需相应修改连接字符串中的属性参数。

以上就是C#读取Excel内容的详细内容,更多关于C#.NET读取数据处理的资料请关注本站其它相关文章!
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表