现做Excel导入功能,客户的Excel文件是没有表头的,导入时系统将客户的第一行数据自动作为抬头了。所以常常导致客户的第一行数据不能导入。
using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sTmpFile + @";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""))
            {
                conn.Open();
                da = new OleDbDataAdapter("SELECT * FROM [" + this.textName.Text.Trim() + "$]", conn);                da.Fill(dsImport);                this.dgList.DataSource = dsImport.Tables[0];
                this.dgList.DataBind();

解决方案 »

  1.   

    •根据默认连接字符串中,数据提供程序会将有效区域内的第一行作为列名,如果此行某单元格为空则用F1、F2表示,其中序数,跟单元格的位置一致,从1开始; 
      •如果希望第一行作为数据显示,而非列名,可以在连接串的 Extended Properties 属性指定:HDR=NO 
      默认值为:HDR=NO 格式如下: 
       
       string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + 
       "Extended Properties=""Excel 8.0;HDR=NO"";" + 
       "data source=" + xlsPath; 
      注意: Excel 8.0;HDR=NO 需要使用双引号(这里的反斜扛,是C#中的转义) 
       
      ref: ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/WD_ADONET/html/745c5f95-2f02-4674-b378-6d51a7ec2490.htm 中 《连接Excel》节(说明:在我自己的MSDN中,它的例子使用了两个双引号是错的,测试没有通过,原文这样说的: 
       
      注意,Extended Properties 所需的双引号必须还要加双引号。 
      ) 
       
      在这种情况下,所有的列名都是以F开头,然后跟索引,从F1开始,F2,F3。