string strConn = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + Server.MapPath("Book1.xls") + ";Extended Properties=Excel 8.0"; 
OleDbConnection conn = new OleDbConnection(strConn);
OleDbDataAdapter adp = new OleDbDataAdapter("Select * from [Sheet1$]",conn);
DataSet ds = new DataSet();
adp.Fill(ds,"Book1");我用上面的方法取得excel数据后 在table里显示 ,为什么显示不了excel里第一行的数据呀?
如果用datagrid就可以显示。
它好象是把excel里的第一行数据当做列头名,但为什么在table里显示不了呀,在datagrid就可以显示。 
该怎么解决呀 ? 谢谢了 。。

解决方案 »

  1.   

    你的EXCEL数据肯定没有列名,所以会出现这种情况.你可以先往EXCEL文件中插入一行作为列名.就可以了.
      

  2.   

    我也是认为第一行被当成列名了,
    问题是怎么可以把它读出来,难道每次读excel都要先手工打开
    excel为其添加列名吗?
      

  3.   

    你使用这种方法就需要添加列名.不妨改用其他方法,如:
    DataSet ds=new DataSet();
    string strConn = "user id=sa;password=12345;initial catalog=hztemp;Server=myserver;Connect Timeout=30";; 
    SqlConnection  conn=new SqlConnection(strConn);
    conn.Open();
    string pstr="select * from openrowset('microsoft.jet.oledb.4.0','excel 8.0;hdr=no;database=d:\\book1.xls;','select * from [sheet1$]'";
    SqlDataAdapter mycommand=new SqlDataAdapter(pstr,conn);
    mycommand.Fill(ds,"ok");
    dataGrid1.DataSource=ds;
    conn.Close();这样就可以了,其中:HDR=NO表示无列名,HDR=YES表示有列名.
      

  4.   

    不好意思,有些写成strConn和 conn,其实指的是同一个,打错了,你应该能看出来吧。