2013-05-11 48 views
1

我有兩個excel文件。
sheet1具有5列與值。
sheet2只有一列。
工作表1和工作表的第一列有一些唯一值。 我需要一個又一個excelsheet,其中新的有5列(匹配的唯一值在工作表Sheet1都和sheet2)如何做到這一點使用C#
任何幫助,將不勝感激。如何比較兩個Excel表格,並在C#中創建新的?

回答

1

您可以通過使用Interop.Excel(Interop C# tutorial)或Interop(f.e. ClosedXML)的一些替代方法來完成此操作。 閱讀文件並使用LINQ獲取您需要的數據。使用IEnumerable。除了可以將sheet1中不在sheet2中的元素放入新工作表並將其保存到Excel文件中。

var workbook1 = new XLWorkbook(@"workbook1.xlsx"); 
var workbook2 = new XLWorkbook(@"workbook2.xlsx"); 
var worksheet1 = workbook.Worksheet("sheet1"); 
var worksheet2 = workbook.Worksheet("sheet2"); 

var listSheet1 = new List<IXLRow>(); // list of Rows 
var listSheet2 = new List<IXLRow>(); 

// puts all UsedRows (including "headers") from sheet1 into a list of rows 
using (var rows = worksheet1.RowsUsed()) 
{ 
    foreach (var row in rows) 
    { 
    listSheet1.Add(row); 
    } 
} 

using(var rows = worksheet2.RowsUsed()) 
{ 
    foreach (var row in rows) 
    { 
    listSheet2.Add(row); 
    } 
} 

IEqualityComparer comparer = new XLRowComparer(); // you have to implement your own comparer here. there's a lot of tutorials/samples out there 

var uniqueIdList = listSheet1.Intersect(listSheet2, comparer).ToList(); // in this case I'd use intersect instead of except which returns the IDs provided in sheet1 and sheet2 

// and now you just have to put the rows from uniqueIdList into a new worksheet and save it 

我希望這是有幫助的...

+0

感謝斯蒂芬。 我試過並得到了Comman值的列表。然而在列表中我得到了列表的第一列的值我only..How可以得到所有5 Coulmn值 'code'var ummatches = list1.Select(F => f.Code)。除(list2.Select(B => b.Code)); – 2013-05-11 08:13:09

+0

我要你提供一些代碼樣本... – stefankmitph 2013-05-11 08:46:05

+0

請給我一些solutions..Thanks – 2013-05-11 09:01:57