我在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
。
答案 0 :(得分:2)
您可以将所有数据填充到数据表中并从中查询,而不是从单元格区域中进行选择。
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)
{
//....
}
希望这会有所帮助...