【问题标题】:Parse Excel sheet dynamically (cells range not provided, as the location of data in sheet may dynamically vary)动态解析 Excel 工作表(未提供单元格范围,因为工作表中数据的位置可能会动态变化)
【发布时间】:2011-05-27 06:20:13
【问题描述】:

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

【问题讨论】:

    标签: c# excel


    【解决方案1】:

    您可以将所有数据填充到数据表中并从中进行查询,而不是从单元格区域中进行选择。

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

    希望这会有所帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      相关资源
      最近更新 更多