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个答案。它运作良好吗?这是正常的吗?
答案 0 :(得分:1)
有一个叫做Linq的Nuget到Excel。我在几个项目中使用这个nuget来查询.cvs和.xlsx文件中的数据没有任何困难,很容易实现。它的性能可能很差,但它可以解决您的问题。
的文档答案 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.
}
}