动态解析Excel工作表(未提供单元格范围,因为工作表中数据的位置可能会动态变化)

时间:2011-05-27 06:20:14

标签: c# excel

我在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

1 个答案:

答案 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)
{
  //....
}

希望这会有所帮助...