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

C#中使用EPPlus实现Excel单列护照数据筛选及多列拆分方案求助

基于EPPlus实现单列护照数据筛选、拆分的落地方案

1. 基础依赖引入

  • 先通过NuGet安装EPPlus包,包管理控制台命令:Install-Package EPPlus,dotnet CLI命令:dotnet add package EPPlus
  • 注意:EPPlus 5.x及以上版本商用需要购买付费授权,个人非商用可免费使用,对授权有要求可选择4.x最后一个无授权限制的稳定版本。

2. 核心实现逻辑

4000行数据量极小,可直接全量加载到内存处理,无需额外做性能优化。

2.1 加载Excel文件

// EPPlus 5.x版本必须加这行声明授权类型,4.x版本可省略
ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 商用场景改为LicenseContext.Commercial

using var package = new ExcelPackage(new FileInfo("你的原始护照数据文件路径.xlsx"));
var worksheet = package.Workbook.Worksheets.First(); // 取第一个工作表,可按需调整工作表索引/名称
int totalRow = worksheet.Dimension.End.Row; // 取工作表有效数据总行数
int sourceCol = 1; // 原始数据存储的列号,A列对应1,B列对应2,按需调整
int startProcessRow = 1; // 如果有表头就改为2,跳过第一行表头

2.2 定义拆分规则和目标列

以下示例为通用模板,你可以根据自己的实际数据格式替换匹配规则,支持分隔符拆分、固定长度截取、正则匹配等多种拆分方式

// 定义拆分后的目标字段和对应列号,示例:B列存护照号、C列存姓名、D列存国籍、E列存有效期
var targetColumnMap = new Dictionary<string, int>()
{
    {"护照号", 2},
    {"姓名", 3},
    {"国籍", 4},
    {"有效期", 5}
};

// 可选:给目标列写入表头
foreach (var item in targetColumnMap)
{
    worksheet.Cells[1, item.Value].Value = item.Key;
    startProcessRow = 2; // 有表头的场景下从第二行开始处理数据
}

2.3 逐行筛选+拆分写入

for (int row = startProcessRow; row <= totalRow; row++)
{
    string rawData = worksheet.Cells[row, sourceCol].Text?.Trim() ?? string.Empty;
    // 第一步:筛选,不符合条件的行直接跳过,可自定义筛选规则
    if (string.IsNullOrEmpty(rawData) || !rawData.Contains("护照号"))
    {
        // 也可以调用worksheet.DeleteRow(row)直接删除无效行,按需调整
        continue;
    }
    
    // 第二步:拆分,以下为分隔符拆分示例,按需替换成你需要的拆分逻辑
    var dataDict = rawData.Split('|')
        .Select(p => p.Split(':'))
        .Where(p => p.Length == 2)
        .ToDictionary(p => p[0].Trim(), p => p[1].Trim());
    
    // 第三步:写入对应目标列
    foreach (var item in targetColumnMap)
    {
        if (dataDict.TryGetValue(item.Key, out var value))
        {
            worksheet.Cells[row, item.Value].Value = value;
        }
    }
}

2.4 保存处理结果

package.SaveAs(new FileInfo("处理后的护照数据文件.xlsx"));

3. 优化建议

  • 如果数据是固定格式的结构化字符串,用正则匹配精准度更高,比如护照号通常为E/K开头加8位数字,正则规则可写为@"[EK]\d{8}"
  • 筛选条件可根据业务需求自定义,比如筛选有效期大于2025年、国籍为指定国家的数据,直接在逐行处理的逻辑中加判断条件即可
  • 处理前建议先备份原始文件,避免操作失误导致数据丢失

内容的提问来源于stack exchange,提问作者jeawaantha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:06:02