【问题标题】:Import excel sheet using jet.oledb.4.0 , setting first row as column name使用 jet.oledb.4.0 导入 excel 表,将第一行设置为列名
【发布时间】:2013-02-10 09:50:24
【问题描述】:

我正在尝试使用 Jet.Oledb 将 excel 文件导入数据表。这是我的代码:

            string sourceConstr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + HttpContext.Current.Server.MapPath("~/" + fileName) + "';Extended Properties='Excel 8.0;HDR=No;IMEX=1'";
            OleDbConnection con = new OleDbConnection(sourceConstr);
            OleDbCommand oleDbCmd = new OleDbCommand();
            con.Open();
            oleDbCmd.Connection = con;
            DataTable dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

            string firstExcelSheetName=dt.Rows[0][2].ToString();
            string query = "select * from [" + firstExcelSheetName + "]";
            OleDbDataAdapter data = new OleDbDataAdapter(query, con);
            data.TableMappings.Add("Table", "dtExcel");
            data.Fill(dtExcel);

在 excel 文件中,第一行具有列名。但我的数据表将 (f1,f2,f3,...) 作为列名,将 Excel 文件的第一行作为第一行。所以我猜我必须告诉第一行包含columnName。但是我怎样才能实现呢?

【问题讨论】:

    标签: c# excel oledb jet


    【解决方案1】:

    引用connectionstrings.com:

    “HDR=是的;”表示第一行包含列名,而不是数据。 “HDR=否;”表示相反。

    因此您可以尝试将连接字符串更改为设置HDR=Yes

    【讨论】:

      【解决方案2】:

      在连接字符串中,即 sourceConstr 在您的情况下,只有一点点变化,如下所示。

      HDR=Yes 
      

      而不是

      HDR=No
      

      修改后就是

      string sourceConstr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + HttpContext.Current.Server.MapPath("~/" + fileName) + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
      

      【讨论】:

      • 告诉我进展如何,处理 excel oledb 一直很坎坷 ;-)
      • 它正在发送,我想发送 ;-)
      • :) 很酷——只有在你回复之后——我看到@Daniel Kelley 和我几乎同时回答了这个问题,而且也差不多。
      • 是的。他比你早6分钟回答。 :)
      猜你喜欢
      • 2018-08-13
      • 2011-05-25
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多