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

C#中使用EPPlus读取Excel数据后,如何将Customer列表的Name字段转为大写并新增name_upper列?

解决方案

我来帮你搞定这个需求,你需要实现两个核心目标:让Name的大写形式单独展示,同时新增name_upper列来呈现这个值。这里有两种实用的方案,你可以根据自己的需求来选:

方案一:添加只读属性自动生成大写名称(推荐)

这种方式更符合面向对象的设计思路,不需要手动在读取数据时做转换,直接通过属性自动获取大写值,还能保留原名称的大小写信息:

  1. 先修改你的Customer类,新增一个只读属性来返回大写的Name:
public class Customer { 
    public string Name { get; set; } 
    public string Phone { get; set; } 
    public string Email { get; set; } 
    public string Contact { get; set; } 
    // 新增只读属性,自动生成大写名称,处理空值避免异常
    public string NameUpper => Name?.Trim().ToUpper() ?? string.Empty;
}

这里用了空合并运算符??来处理Name为null的情况,防止出现空引用异常。

  1. 然后修改Main方法的输出代码,新增name_upper列的显示:
static void Main(string[] args) { 
    var customers = ReadXls(); 
    foreach (var item in customers) { 
        Console.WriteLine($"Name:{item.Name}\n name_upper:{item.NameUpper}\n Phone:{item.Phone}\nContact:{item.Contact}\nEmail:{item.Email}\n"); 
    } 
}

方案二:读取Excel时直接转换并存储大写名称

如果你希望把大写的名称单独存储起来,而不是动态生成,可以在读取数据的时候就完成转换:

  1. 先给Customer类新增一个存储大写名称的属性:
public class Customer { 
    public string Name { get; set; } 
    public string NameUpper { get; set; } // 新增存储大写名称的属性
    public string Phone { get; set; } 
    public string Email { get; set; } 
    public string Contact { get; set; } 
}
  1. 在ReadXls方法中读取Name时,同时转换为大写并赋值给NameUpper:
private static List<Customer> ReadXls() { 
    var response = new List<Customer>(); 
    string FileName; 
    Console.WriteLine("Diretório do ficheiro:"); 
    FileName = Console.ReadLine(); 
    FileInfo existingFile = new FileInfo(FileName); 
    ExcelPackage.LicenseContext = LicenseContext.NonCommercial; 
    using(ExcelPackage package = new ExcelPackage(existingFile)) { 
        ExcelWorksheet worksheet = package.Workbook.Worksheets[0]; 
        int colCount = worksheet.Dimension.End.Column; 
        int rowCount = worksheet.Dimension.End.Row; 
        int row = 2; 
        int col = 1; 
        while(string.IsNullOrWhiteSpace(worksheet.Cells[row,col].Value?.ToString()) == false) { 
            Customer customer = new(); 
            var originalName = worksheet.Cells[row, 4].Text.Trim();
            customer.Name = originalName; // 保留原名称
            customer.NameUpper = originalName.ToUpper(); // 转换为大写存储
            customer.Phone = worksheet.Cells[row, 5].Text.Trim(); 
            customer.Contact = worksheet.Cells[row, 7].Text.Trim(); 
            customer.Email = worksheet.Cells[row, 8].Text.Trim(); 
            response.Add(customer); 
            row += 1; 
        } 
    } 
    return response; 
}
  1. 最后同样在Main方法中输出name_upper列即可,代码和方案一的输出部分一致。

额外小提示

  • 如果你不需要保留原名称的大小写,也可以直接把customer.Name赋值为originalName.ToUpper(),这样输出时Name本身就是大写,但这种方式会丢失原数据的大小写信息,建议谨慎选择。
  • 处理字符串转换时,一定要考虑空值情况,比如用originalName?.ToUpper() ?? string.Empty来避免空引用异常,让代码更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:23:11