2013-05-11 115 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