【发布时间】:2013-05-11 17:19:25
【问题描述】:
我有两个 excel 文件。sheet1 有 5 列值。sheet2 只有一列。
sheet1 和 sheet 的第一列具有一些唯一值。
我需要另一个excelsheet,其中新的有 5 列(sheet1 和 sheet2 中的唯一值匹配) 如何使用C# 执行此操作?
任何帮助将不胜感激。
【问题讨论】:
我有两个 excel 文件。sheet1 有 5 列值。sheet2 只有一列。
sheet1 和 sheet 的第一列具有一些唯一值。
我需要另一个excelsheet,其中新的有 5 列(sheet1 和 sheet2 中的唯一值匹配) 如何使用C# 执行此操作?
任何帮助将不胜感激。
【问题讨论】:
您可以通过使用 Interop.Excel (Interop C# tutorial) 或 Interop 的其他替代方法 (f.e. ClosedXML) 来完成此操作。 读入文件并使用 LINQ 获取您需要的数据。使用 IEnumerable.Except 您可以只从 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
我希望这会有所帮助...
【讨论】:
codevar ummatches = list1.Select(f => f.Code).Except(list2.Select(b => b.代码));