我在 Win 7 机器上的 VS2010 中使用 C#.NET 3.5。我有一个 Excel 工作表,我想提取其中存储的数据。 我知道如何在给定单元格范围时解析 Excel。这里我们使用 OLEDB 进行连接,提供 SQL 命令并将其映射到 DataTable
,然后访问数据。
select * from [sheetname$A2:N50]
其中“sheetname”是 Excel 工作表的名称,“$A2:N50”是单元格的范围。
但是,但是,我的要求完全不同。
我不能像上面那样对单元格范围进行硬编码,因为数据单元格的位置可能会动态变化。例如:单元格A20中存储的数据可能会在下一次执行时更改为C14。
我需要根据一些关键字搜索来解析我的 Excel 工作表。我的意思是我应该搜索关键字“XYZ”,而不是解析它下面的表格。该关键字可能会在每次执行时更改其位置。
因为我不知道单元格范围,所以我什至无法使用上述查询将 Excel 数据放入 DataTable
。
最佳答案
您可以将所有数据填充到数据表中并从中查询,而不是从单元格区域中进行选择。
DataTable dt = new DataTable();
try
{
OleDbConnection con = new OleDbConnection(string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=yes;IMEX=1""", excelPath));
OleDbDataAdapter da = new OleDbDataAdapter("select * from [sheetname$]", con);
da.Fill(dt);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
//now you can use dt DataTable
foreach (DataRow dr in dt.Rows)
{
//....
}
希望这有助于...
关于c# - 动态解析 Excel 工作表(未提供单元格范围,因为数据在工作表中的位置可能会动态变化),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6148550/