0

我正在阅读 C# 中的 Excel 文件。文件中有3张纸:

  1. 概括
  2. 用户
  3. 其他

我正在遍历摘要表的列。(下面的代码)

有一列:SummaryID在每张纸中。

foreach (DataColumn dc in Summary.Columns)
 {
   foreach (DataRow dr in Summary.AsEnumerable())
   {
     //get column SummaryID for everyrow
     //And then get all rows in Users sheet that match  SummaryID
     //And then get all rows in Others sheet that match SummaryID
   }
  }

我的问题是:对于摘要表 (SummaryID) 中的每一行,我想获取与 'Users' 和 'Others' 表中的 SummaryID 匹配的所有匹配行

注意:该列SummaryID存在于所有 3 个工作表中,并且是所有工作表中的第一列。

4

3 回答 3

2

我喜欢使用 LinqToExcel他们有一个可以帮助你的 LinqToExcel.Row 类,你将使用 linq 而不是 foreach 语句。

于 2013-02-13T18:56:29.357 回答
0

您可以使用 OleDB 来执行此操作。代码类似

 // create a connection to your excel file
    // the 8.0 denotes excel 2003
    // you will need to use the right number for your version of excel
    OleDbConnection con = new OleDbConnection( @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=InsertYourFile.xls"; Extended Properties=Excel 8.0" );

    // create a new blank datatableDataTable 
   dtSheets = new DataTable();

    // create a data adapter to select everything from the worksheet you want
    OleDbDataAdapter da = new OleDbDataAdapter( "select * from [YourWorksheetName$] WHERE BLAH, etc", con );


   // use the data adapter to fill the datatable
   da.Fill( dtSheets );
于 2013-02-13T19:24:48.150 回答
0

您是否考虑过将您的 Excel 工作表视为数据库并查询出您想要使用的数据OLEDB或类似技术?

那时这将是一个简单的Join查询 - 可能会更快......

于 2013-02-13T17:49:28.913 回答