使用 OLEDB 从 Excel 中读取数据

Posted

技术标签:

【中文标题】使用 OLEDB 从 Excel 中读取数据【英文标题】:Read Data from Excel using OLEDB 【发布时间】:2014-12-20 10:50:04 【问题描述】:

我使用 OLEDB 读取了一个 excel 文件。下面是代码:

            string conn;             
            conn = ("Provider=Microsoft.ACE.OLEDB.12.0;" +
            ("Data Source=" + _filename + ";" +
            "Extended Properties=\"Excel 12.0;\""));
            OleDbConnection oleDBCon = new OleDbConnection(conn);
            oleDBCon.Open();
            DataTable dt = oleDBCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);                    
            string SSQL = "SELECT * from [ Sheet1$ ]";
            OleDbDataAdapter oleDA = new OleDbDataAdapter(SSQL, conn);
            DataSet ds = new DataSet();
            oleDA.Fill(ds);
            DataTable _DtTable = ds.Tables[0];
            oleDBCon.Close();
            dataGridView1.DataSource = _DtTable;
            foreach (DataRow rows in _DtTable.Rows)
            
                string Description = rows[0].ToString();
                string Code= rows[1].ToString();              
                textBox1.AppendText("Printing Description: " + Description + " and Code: " + Code + ",Date:" + DateTime.Now.ToString() + Environment.NewLine);                             
            

excel文件如下:

textBox1中打印的数据是:

Printing Description:Desc 2 and Code: Code 2,Date:20/12/2014 12:36:54 μμ
Printing Description: Desc 3 and Code: Code 3,Date:20/12/2014 12:36:54 μμ

所以,我的问题是 excel 的第一行将转到数据表的标题。我怎样才能避免这种情况(不向 Excel 添加任何额外的第一行)?

【问题讨论】:

【参考方案1】:

只需在连接字符串的末尾添加“HDR=No”,即“没有指示列但包含数据的标题行”,那么您也可以获取第一行数据。

所以你的完整连接字符串是

 conn = ("Provider=Microsoft.ACE.OLEDB.12.0;" +
        ("Data Source=" + _filename + ";" +
        "Extended Properties=\"Excel 12.0;\";HDR=No"));

【讨论】:

以上是关于使用 OLEDB 从 Excel 中读取数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 Oledb 的其他用户使用时读取 excel?

C#ListView控件OleDb方法读取EXCEL

使用 OLEDB 数据提供程序读取 excel 文件

需要通过oledb连接从azure存储blob容器中读取excel文件

使用 OleDB 读取 Excel 文件返回格式错误的 UPC 编号

使用OLEDB读取EXCEL数据时,为何读取不到单元格中的时间值,全是1900\1\0