C#使用OLEDB连接与操作Excel文件详解
本文介绍了如何在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表格的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









