如题:导入的excel文件sheet名称不是sheet1就无法读取???DataTable dt =  new DataTable();
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+ 
"Data Source=" + txtPath + ";" + 
"Extended Properties=\"Excel 8.0;HDR=No;\""); 
OleDbDataAdapter AdapterObj2=new OleDbDataAdapter("SELECT * FROM [Sheet1$]",conn);
OleDbCommandBuilder BuilderObj2=new OleDbCommandBuilder(AdapterObj2);

AdapterObj2.Fill(dt);如果sheet名称不是Sheet1,那么上面的代码就执行不了了,
一般的别人导出的excel,都是sheet名称和表名一样的,
不会是Sheet1,怎么更改上面的代码,使得如果上传的excel的sheet名称
不是Sheet1也能读取

解决方案 »

  1.   

    顶一下,
    如果用这种方式读取,我一般都是要求对方不能更改Sheet的名称;或者不用OleDb的方式,而是使用Excel.Application
      

  2.   

    cn.GetSchema("Tables")可以得到所有表
      

  3.   

    sheet1为表名,查询excel表名称或传表名称实现
      

  4.   

    请问楼上如何查到查询excel表名称
      

  5.   

    public string getFristTableName(string FilePath) {
            string tableName="";
            using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet." + "OLEDB.4.0;Extended Properties=\"Excel 8.0\";Data Source=" + FilePath))
            {
                conn.Open();
                DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                tableName = dt.Rows[0][2].ToString().Trim();
                conn.Close();
            }
            return tableName;
        }
    这个可以获取表名
      

  6.   

    OleDbDataAdapter AdapterObj2=new OleDbDataAdapter("SELECT * FROM ["excel要读取数据的CELL名称"]",conn);