c#用exledb从excel中读错了

时间:2018-06-11 12:47:22

标签: c# oledbconnection

 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();
                }
            }
        }

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

更新:我的示例excel文件有3行,我的行数为9。我刚刚复制了这些行,并将我的文件设置为24行+ 1个标题行,当我执行rows.count时,我得到了24个答案。它运作良好吗?这是正常的吗?

2 个答案:

答案 0 :(得分:1)

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

以下是Linq to Excel

的文档

答案 1 :(得分:0)

我强烈建议您查看EPPLUS库https://github.com/JanKallman/EPPlus/wiki

我在oledb上遇到麻烦,直到我找到了EPPLUS。它非常易于用于创建和更新excel文件。有很多很好的例子,例如来自How do i iterate through rows in an excel table using epplus?

的例子
var package = new ExcelPackage(new FileInfo("sample.xlsx"));

ExcelWorksheet workSheet = package.Workbook.Worksheets[1];
var start = workSheet.Dimension.Start;
var end = workSheet.Dimension.End;
for (int row = start.Row; row <= end.Row; row++)
{ // Row by row...
    for (int col = start.Column; col <= end.Column; col++)
    { // ... Cell by cell...
        object cellValue = workSheet.Cells[row, col].Text; // This got me the actual value I needed.
    }
}