OleDb方式读取Excel、MDB

这里写自定义目录标题

开发环境

Visual Studio2017

依赖项

System.Data.OleDb.dll

代码块

try
{
    Dictionary<string, DataTable> result = new Dictionary<string, DataTable>();
    //数据表
    DataSet ds = new DataSet();

    //获取文件扩展名
    string strExtension = System.IO.Path.GetExtension(filePath).ToLower();
    string strFileName = System.IO.Path.GetFileName(filePath);

    //Excel、mdb的连接
    System.Data.OleDb.OleDbConnection objConn = null;
    switch (strExtension)
    {
        case ".mdb":
            objConn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0 ;Data Source=" + filePath);
            break;
        case ".xls":
            objConn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";" + "Extended Properties=\"Excel 8.0;HDR=yes;IMEX=1;\"");
            break;
        case ".xlsx":
            objConn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";" + "Extended Properties=\"Excel 12.0;HDR=yes;IMEX=1;\"");//此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串)  备注: "HDR=yes;"是说Excel文件的第一行是列名而不是数,"HDR=No;"正好与前面的相反。"IMEX=1 "如果列中的数据类型不一致,使用"IMEX=1"可必免数据类型冲突。 
            break;
        default:
            objConn = null;
            break;
    }
    if (objConn == null)
    {
        return null;
    }
    objConn.Open();

    //获取Excel中所有Sheet表的信息
    System.Data.DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
    DataRow[] drs = schemaTable.Select("TABLE_TYPE like 'TABLE'");

    string[] sheetNames = new string[drs.Length];
    //获取Excel的第一个Sheet表名
    for (int index = 0; index < drs.Length; index++)
    {
        string sheetName = drs[index][2].ToString().Trim(); ;
        sheetNames[index] = sheetName;

        string strSql = string.Format("select * from [{0}]",sheetName);

        //获取Excel指定Sheet表中的信息
        System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand(strSql, objConn);
        System.Data.OleDb.OleDbDataAdapter myData = new System.Data.OleDb.OleDbDataAdapter(strSql, objConn);
        myData.Fill(ds, sheetName);//填充数据
        result.Add(sheetName, ds.Tables[0]);
    }
    objConn.Close();
    //dtExcel即为excel文件中指定表中存储的信息
    return result;
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message + "\r\n" + ex.StackTrace);
    return null;
}

未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值