C#使用OLEDB连接与操作Excel文件详解

Alice
Alice
发布时间:2026-10-13| 3人浏览过
原创

本文介绍了如何在C#应用程序中使用OLEDB技术连接和操作Excel文件。这种方法将Excel视为一种数据源,利用类似SQL的语句进行数据的读取、写入及管理,具有轻量级、无需安装Microsoft Office组件的特点。

原理与准备

在C#中操作Excel有多种方式,如使用Excel COM对象、OpenXML SDK或NPOI等。其中OLEDB方式的优势在于不需要目标机器安装Excel软件,且处理速度较快,适合简单的数据导入导出场景。其核心是通过ADO.NET的OleDb命名空间,将Excel文件作为关系型数据库表来访问。

第一步:理解连接字符串

建立连接的关键在于构建正确的连接字符串。以下是常用配置参数的说明:

  • Provider=Microsoft.Jet.OLEDB.4.0:用于连接Excel 97-2003(.xls)格式。若需支持Excel 2007及以上(.xlsx),需更换为Microsoft.ACE.OLEDB.12.0并提供相应驱动。
  • Data Source:Excel文件的完整物理路径。
  • Extended Properties='Excel 8.0;HDR=Yes;IMEX=1':
    • Excel 8.0:对应Excel 2000及以上版本格式标识。
    • HDR=Yes:表示第一行是标题行(列名),在读取时不作为数据记录。
    • IMEX=1:开启混合类型数据列的导入模式,避免数据类型冲突导致的读取失败。

第二步:读取Excel文件数据

要读取特定工作表(Sheet)的数据,可将其视作一张表,使用SELECT * FROM [SheetName$]语句。注意Sheet名称后需加美元符号$,并置于方括号内。

using System;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;

// 假设 openFileDialog1 已选中的文件路径
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
    "Data Source=" + openFileDialog1.FileName + ";" +
    "Extended Properties='Excel 8.0;HDR=Yes;IMEX=2'";

using (OleDbConnection ole_conn = new OleDbConnection(sConnectionString))
{
    ole_conn.Open();
    using (OleDbCommand ole_cmd = ole_conn.CreateCommand())
    {
        // 替换[Sheet1$]为你实际的工作表名称
        ole_cmd.CommandText = "select * from [Sheet1$]";
        OleDbDataAdapter adapter = new OleDbDataAdapter(ole_cmd);
        DataSet ds = new DataSet();
        adapter.Fill(ds, "Sheet1");

        // 遍历数据行
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            // 根据列名获取值
            MessageBox.Show(ds.Tables[0].Rows[i]["商家名称"].ToString());
        }
    }
}

第三步:获取所有工作表名称

如果不确定文件中包含哪些Sheet,可以使用GetOleDbSchemaTable方法获取元数据,从而动态列出所有工作表名称。

String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
    "Data Source=" + openFileDialog1.FileName + ";" +
    "Extended Properties='Excel 8.0;HDR=Yes;IMEX=2'";

using (OleDbConnection ole_conn = new OleDbConnection(sConnectionString))
{
    ole_conn.Open();
    // 获取架构表信息
    DataTable tb = ole_conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    foreach (DataRow row in tb.Rows)
    {
        // TABLE_NAME 即为 Sheet 的名称(带 $ 后缀)
        MessageBox.Show(row["TABLE_NAME"].ToString());
    }
}

第四步:向现有Excel写入数据

写入数据可直接使用标准的SQL INSERT语句。确保目标Sheet存在且有对应的列结构。

String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
    "Data Source=" + openFileDialog1.FileName + ";" +
    "Extended Properties='Excel 8.0;'";

using (OleDbConnection ole_conn = new OleDbConnection(sConnectionString))
{
    ole_conn.Open();
    using (OleDbCommand ole_cmd = ole_conn.CreateCommand())
    {
        // 向指定Sheet的特定列插入数据
        ole_cmd.CommandText = "insert into [Sheet1$](商户ID,商家名称) values('DJ001','点击科技')";
        ole_cmd.ExecuteNonQuery();
        MessageBox.Show("数据插入成功......");
    }
}

第五步:新建Excel文件并写入数据

OLEDB允许在不存在的情况下直接创建新的工作表(Table),这实际上是在生成一个新的Excel文件或扩展其结构。

String filePath = @"d:\\excel1.xls";
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
    "Data Source=" + filePath + ";" +
    "Extended Properties='Excel 8.0;'";

using (OleDbConnection ole_conn = new OleDbConnection(sConnectionString))
{
    ole_conn.Open();
    using (OleDbCommand ole_cmd = ole_conn.CreateCommand())
    {
        // 1. 创建新表(Sheet)
        ole_cmd.CommandText = "CREATE TABLE CustomerInfo ([CustomerID] VarChar,[Customer] VarChar)";
        ole_cmd.ExecuteNonQuery();

        // 2. 插入初始数据
        ole_cmd.CommandText = "INSERT INTO CustomerInfo(CustomerID,Customer) VALUES('DJ001','点击科技')";
        ole_cmd.ExecuteNonQuery();

        MessageBox.Show("生成Excel文件成功并写入一条数据......");
    }
}

以上就是C#使用OLEDB操作Excel文件的详细内容,更多关于C#编程处理Excel表格的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。