• 从Excel中指定的sheet名称或索引读取数据到DataTable,以便用户更改sheet名称后仍能读取数据


          如果大家在google搜C#读取excel数据,一定会搜索出一下的代码:

    Code

          但是上面的代码只是查询sheet1$表,如果用户把sheet表名改了就是报下面的错:

             'sheet1$' 不是一个有效名称。请确认它不包含无效的字符或标点,且名称不太长。

          那么怎样才能获得Excel中各个sheet的名称呢?这样就能动态的选中返回哪个sheet的数据,即使用户更改了名称也不怕,完全可以把所有sheet的名称列出来供用户选择: 

          那么下面就把解决问题的代码列出来,主要用到了OleDbConnection.GetOleDbSchemaTable()方法

        

       /// <summary>
            
    /// 根据excel的文件的路径提取其中表的数据
            
    /// </summary>
            
    /// <param name="Path">Excel文件的路径</param>
            private void GetDataFromExcelWithAppointSheetName(string Path)
            {
                
    //连接串
                string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
                OleDbConnection conn 
    = new OleDbConnection(strConn);

                conn.Open();

                
    //返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等  
                DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { nullnullnull"Table" });

                
    //包含excel中表名的字符串数组
                string[] strTableNames = new string[dtSheetName.Rows.Count];
                
    for (int k = 0; k < dtSheetName.Rows.Count; k++)
                {
                    strTableNames[k] 
    = dtSheetName.Rows[k]["TABLE_NAME"].ToString();
                }

                OleDbDataAdapter myCommand 
    = null;
                DataTable dt 
    = new DataTable();

                
    //从指定的表明查询数据,可先把所有表明列出来供用户选择
                string strExcel = "select * from [" + strTableNames[0+ "]";
                myCommand 
    = new OleDbDataAdapter(strExcel, strConn);
                dt 
    = new DataTable();
                myCommand.Fill(dt);

                dataGridView1.DataSource 
    = dt; //绑定到界面
            }


  • 相关阅读:
    11 数值的整数次方
    10 二进制中1的个数
    6 重建二叉树
    5 从尾到头打印链表
    计算机网络面试题
    Http和Https的区别
    UVALive 7749 Convex Contour (计算几何)
    Gym 101190H Hard Refactoring (模拟坑题)
    UVa 11324 The Largest Clique (强连通分量+DP)
    HDU 6006 Engineer Assignment (状压DP)
  • 原文地址:https://www.cnblogs.com/gossip/p/1362005.html
Copyright © 2020-2023  润新知