首页 > 解决方案 > 时间:2019-01-03 标签:c#使用oledb从excel读取错误

问题描述

 private void OnCreated(object sender, FileSystemEventArgs e)
        {
            excelDataSet.Clear();
            string extension = Path.GetExtension(e.FullPath);
            if (extension == ".xls" || extension == ".xlsx")
            {
                string ConnectionString = "";
                if (extension == ".xls") { ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = '" + e.FullPath + "';Extended Properties=\"Excel 8.0;HDR=YES;\""; }
                if (extension == ".xlsx") { ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = '" + e.FullPath + "';Extended Properties=\"Excel 12.0;HDR=YES;\""; }

                using (OleDbConnection conn = new OleDbConnection(ConnectionString))
                {
                    conn.Open();
                    OleDbDataAdapter objDA = new OleDbDataAdapter("select * from [Sheet1$]", conn);
                    objDA.Fill(excelDataSet);
                    conn.Close();
                    conn.Dispose();
                }
            }
        }

这是我的代码。当我的文件观察器触发时它正在工作。问题是我读取的 excel 文件有 1 个标题行和 3 个具有值的行。当我使用此代码并检查我的数据集行数时,我得到 9 .. 我不知道这 9 是从哪里来的,我做错了什么吗?我正在检查我的代码最后 30-35 分钟,但仍然找不到我做错了什么。我得到了列的正确但行不起作用。我不需要标题行顺便说一句

更新:我的示例 excel 文件有 3 行,我得到 9 作为行数。我只是复制了这些行并使我的文件成为 24 行 + 1 个标题行,当我执行 rows.count 时,我得到了 24 作为答案。所以效果很好?这正常吗?

标签: c#oledbconnection

解决方案


有一个名为 Linq to Excel 的 Nuget。我在几个项目中使用这个nuget来查询.csv和.xlsx文件里面的数据没有任何困难,很容易实现。它的性能可能很差,但它可以解决您的问题。

这是Linq to Excel的文档


推荐阅读