如何使用C#匹配两个Excel文件列值并复制对应内容至指定列?
用C#实现Excel数据匹配与赋值的方案
没问题,我来帮你搞定这个Excel数据匹配的需求!咱们可以用EPPlus这个流行的.NET库来实现,它处理Excel文件简单高效,完全能应对你这10000行的数据量。
准备工作
首先你需要在项目里安装EPPlus NuGet包:
- 如果你用Package Manager控制台,执行命令:
Install-Package EPPlus - 或者在Visual Studio的NuGet包管理器里搜索“EPPlus”直接安装
注意哦:EPPlus 5.x及以上版本,商业用途需要购买许可证,非商用个人项目可以免费使用。
完整实现代码
下面是完整的代码示例,我会加上详细注释,你只需要替换成自己的文件路径就行:
using OfficeOpenXml; using System; using System.Collections.Generic; using System.IO; class ExcelDataMatcher { static void Main(string[] args) { // 替换成你的Excel文件路径 string excel1Path = @"C:\YourPath\Excel1.xlsx"; string excel2Path = @"C:\YourPath\Excel2.xlsx"; string outputExcel2Path = @"C:\YourPath\Updated_Excel2.xlsx"; // 可以覆盖原文件,也可以存新文件 // 第一步:读取Excel1的数据,存入字典(COL A为键,COL B为值) Dictionary<string, string> colAToColB = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); // 忽略大小写匹配,按需调整 using (ExcelPackage package1 = new ExcelPackage(new FileInfo(excel1Path))) { ExcelWorksheet worksheet1 = package1.Workbook.Worksheets[0]; // 假设数据在第一个工作表 int rowCount1 = worksheet1.Dimension.Rows; // 从第2行开始(假设第1行是表头) for (int row = 2; row <= rowCount1; row++) { string colAValue = worksheet1.Cells[row, 1].Text.Trim(); // COL A对应第1列 string colBValue = worksheet1.Cells[row, 2].Text.Trim(); // COL B对应第2列 // 避免重复键,若有重复可按需处理(比如保留最后一个) if (!string.IsNullOrEmpty(colAValue) && !colAToColB.ContainsKey(colAValue)) { colAToColB.Add(colAValue, colBValue); } } } // 第二步:读取Excel2,匹配并写入COL3 using (ExcelPackage package2 = new ExcelPackage(new FileInfo(excel2Path))) { ExcelWorksheet worksheet2 = package2.Workbook.Worksheets[0]; // 假设数据在第一个工作表 int rowCount2 = worksheet2.Dimension.Rows; // 从第2行开始(假设第1行是表头) for (int row = 2; row <= rowCount2; row++) { string col1Value = worksheet2.Cells[row, 1].Text.Trim(); // COL1对应第1列 // 查找匹配的值,找到就写入COL3,没找到可设为空或默认值 if (colAToColB.TryGetValue(col1Value, out string colBValue)) { worksheet2.Cells[row, 3].Value = colBValue; // COL3对应第3列 } else { worksheet2.Cells[row, 3].Value = string.Empty; // 也可以改成"无匹配"这类提示文本 } } // 保存修改后的Excel2 package2.SaveAs(new FileInfo(outputExcel2Path)); } Console.WriteLine("数据匹配完成,已生成更新后的Excel文件!"); } }
关键细节说明
- 字典存储:用字典存储Excel1的COL A和COL B映射,查找匹配的时间复杂度是O(1),处理10000行数据完全无性能压力。
- 表头处理:代码默认第1行是表头,如果你的Excel没有表头,记得把循环起始行改成1。
- 大小写匹配:字典初始化用了
StringComparer.OrdinalIgnoreCase,如果需要严格区分大小写,去掉这个参数即可。 - 空值处理:代码过滤了空的COL A值,避免无效键;匹配不到的情况设置了空值,你可以根据需求改成其他提示内容。
内容的提问来源于stack exchange,提问作者kiranpk
相关产品推荐
相关产品推荐

