You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:10:38