c# 使用 oledb 从 excel 读取错误
c# wrong reading from excel with oledb
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 header 行和 3 行有值。当我使用此代码并检查我的数据集行数时,我得到 9.. 我不知道它从哪里获取 9,我做错了什么吗?我检查了最后 30-35 分钟的代码,但仍然找不到我做错了什么。
我得到了列的权利,但行不工作。我不需要 header 行 btw
更新:我的示例 excel 文件有 3 行,我得到 9 作为行数。我只是复制了这些行并使我的文件成为 24 行 + 1 header 行,当我这样做时 rows.count 我得到了 24 作为答案。所以它工作正常?这正常吗?
我强烈建议您看看 EPPLUS 库 https://github.com/JanKallman/EPPlus/wiki
在找到 EPPLUS 之前,我在使用 oledb 时遇到了很多麻烦。创建和更新 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.
}
}
有一个名为 Linq to Excel 的 Nuget。我在几个项目中使用这个nuget来查询.csv和.xlsx文件中的数据没有任何困难,它很容易实现。它可能性能不佳,但可以解决您的问题。
的文档
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 header 行和 3 行有值。当我使用此代码并检查我的数据集行数时,我得到 9.. 我不知道它从哪里获取 9,我做错了什么吗?我检查了最后 30-35 分钟的代码,但仍然找不到我做错了什么。 我得到了列的权利,但行不工作。我不需要 header 行 btw
更新:我的示例 excel 文件有 3 行,我得到 9 作为行数。我只是复制了这些行并使我的文件成为 24 行 + 1 header 行,当我这样做时 rows.count 我得到了 24 作为答案。所以它工作正常?这正常吗?
我强烈建议您看看 EPPLUS 库 https://github.com/JanKallman/EPPlus/wiki
在找到 EPPLUS 之前,我在使用 oledb 时遇到了很多麻烦。创建和更新 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.
}
}
有一个名为 Linq to Excel 的 Nuget。我在几个项目中使用这个nuget来查询.csv和.xlsx文件中的数据没有任何困难,它很容易实现。它可能性能不佳,但可以解决您的问题。
的文档