使用OLEDB读取不同版本Excel数据的连接字符串设置

本文介绍如何使用OLEDB从Excel 2003和2007/2010中读取数据到DataTable,详细解释了不同版本Excel的连接字符串配置。

 

摘要: 用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的/// summary /// 把数据从Excel装载到DataTable /// /summary /// param name=" ...
用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的
/// <summary>
    /// 把数据从Excel装载到DataTable
    /// </summary>
    /// <param name="pathName">带路径的Excel文件名</param>
    /// <param name="sheetName">工作表名</param>
    /// <param name="tbContainer">将数据存入的DataTable</param>
    /// <returns></returns>
    public DataTable ExcelToDataTable(string pathName, string sheetName)
    {
        DataTable tbContainer = new DataTable();
        string strConn = string.Empty;
        if (string.IsNullOrEmpty(sheetName)) { sheetName = "Sheet1"; }
        FileInfo file = new FileInfo(pathName);
        if (!file.Exists) { throw new Exception("文件不存在"); }
        string extension = file.Extension;
        switch (extension)
        {
            case ".xls":
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
                break;
            case ".xlsx":
                strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathName + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";
                break;
            default:
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
                break;
        }
        //链接Excel
        OleDbConnection cnnxls = new OleDbConnection(strConn);
        //读取Excel里面有 表Sheet1
        OleDbDataAdapter oda = new OleDbDataAdapter(string.Format("select * from [{0}$]", sheetName), cnnxls);
        DataSet ds = new DataSet();
        //将Excel里面有表内容装载到内存表中!
        oda.Fill(tbContainer);
        return tbContainer;
    }
这里需要注意的地方是,当文件的后缀名为.xlsx(excel2007/2010)时的连接字符串是"Provider=Microsoft.ACE.OLEDB.12.0;....",注意中间红色部分不是"Jet"。
### 使用OLEDB在VB.NET中读取Excel文件 在VB.NET中,可以通过使用`OleDbConnection`类来连接读取Excel文件的内容。以下是实现这一功能的具体方法以及示例代码。 #### 连接字符串配置 为了通过OLEDB访问Excel文件,需要定义合适的连接字符串。对于不同Excel版本(如`.xls`和`.xlsx`),连接字符串会有所不同: - **适用于Excel 97-2003 (.xls 文件)** 的连接字符串如下: ```plaintext Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\path\to\your\file.xls;Extended Properties="Excel 8.0;HDR=YES"; ``` - **适用于Excel 2007及以上 (.xlsx 文件)** 的连接字符串如下: ```plaintext Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\your\file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES"; ``` 其中,“HDR=YES”表示第一行作为列名处理;如果数据不包含列名,则应设置为“HDR=NO”。 #### 示例代码 下面是一个完整的VB.NET程序示例,展示如何利用OLEDB读取Excel文件中的数据: ```vbnet Imports System.Data.OleDb Module Module1 Sub Main() ' 定义连接字符串 Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=C:\path\to\your\file.xlsx;" & _ "Extended Properties=""Excel 12.0 Xml;HDR=YES"";" ' 创建连接对象 Using conn As New OleDbConnection(connectionString) Try ' 打开数据连接 conn.Open() ' SQL查询语句,假设工作表名为Sheet1$ Dim query As String = "SELECT * FROM [Sheet1$]" ' 创建命令对象 Using cmd As New OleDbCommand(query, conn) ' 创建适配器并将结果填充到DataTable中 Using adapter As New OleDbDataAdapter(cmd) Dim dataTable As New DataTable() adapter.Fill(dataTable) ' 遍历并打印表格内容 For Each row As DataRow In dataTable.Rows Console.WriteLine(String.Join(", ", row.ItemArray)) Next End Using End Using Catch ex As Exception Console.WriteLine("Error: " & ex.Message) Finally If conn.State = ConnectionState.Open Then conn.Close() End If End Try End Using End Sub End Module ``` 此代码片段展示了如何打开一个Excel文件,并从中提取指定工作表的数据。它还包含了异常捕获机制以确保即使发生错误也能安全关闭资源[^1]。 #### 注意事项 - 如果目标计算机未安装支持的Access Database Engine组件,则可能无法成功运行上述代码。需下载并安装对应的驱动程序。 - 对于不同类型的电子表格或者更复杂的场景下使用的其他连接方式可以参考额外提供的ADO.NET连接串例子[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值