C#读取Excel内容示例分享
本文介绍在.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,需相应修改连接字符串中的属性参数。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









