我用的
  //源的定义 
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0; " + "Data Source= " + strExcelFileName + "; " + "Extended Properties= 'Excel 8.0;HDR=NO;IMEX=1 '; ";
            // string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties=Excel 8.0;";            //Sql语句 
            string strExcel = string.Format("select   *   from   [{0}$] ", strSheetName);  // 这是一种方法 
            //   string strExcel = "select   *   from     [sheet1$]  ";            //定义存放的数据表 
            DataSet ds = new DataSet();            //连接数据源 
            OleDbConnection conn = new OleDbConnection(strConn);            try
            {
                conn.Open();
                OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);                adapter.Fill(ds, strSheetName);
            }
            catch (Exception ex)
            {
                string _Message = "打开Excel出错";
                MessageBox.Show(_Message.ToString() + ex.ToString());            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }            //适配到数据源 
            conn.Close();
            return ds.Tables[strSheetName];
这个做的导入,但现在有一个问题
 dt.Columns[i].ColumnName = Convert.ToString(dt.Rows[0][i]);如果excel中的某一列是数字类型的话,即使第一行是文本,但运行这句时会出错,其它的就不会,哪怕说下面的数据是空都可以,但就是不可以是数字,有谁遇到过这个问题呢?怎么解决啊?

解决方案 »

  1.   

    呵呵,怎么感觉你好像搞错了。你返回的dataTable本身就有列名,你还取什么列名啊。dt.Columns[xxx].ColumnName就是列名啊。
      

  2.   

    那个列名全是F1,F2来的,我就是要把excel中的第一行的数据写成列名,同时在保存数据库时,我也是从Excel的第二行开始写数据