C#中使用EPPlus读取Excel数据后,如何将Customer列表的Name字段转为大写并新增name_upper列?
解决方案
我来帮你搞定这个需求,你需要实现两个核心目标:让Name的大写形式单独展示,同时新增name_upper列来呈现这个值。这里有两种实用的方案,你可以根据自己的需求来选:
方案一:添加只读属性自动生成大写名称(推荐)
这种方式更符合面向对象的设计思路,不需要手动在读取数据时做转换,直接通过属性自动获取大写值,还能保留原名称的大小写信息:
- 先修改你的
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的情况,防止出现空引用异常。
- 然后修改
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时直接转换并存储大写名称
如果你希望把大写的名称单独存储起来,而不是动态生成,可以在读取数据的时候就完成转换:
- 先给
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; } }
- 在
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; }
- 最后同样在
Main方法中输出name_upper列即可,代码和方案一的输出部分一致。
额外小提示
- 如果你不需要保留原名称的大小写,也可以直接把
customer.Name赋值为originalName.ToUpper(),这样输出时Name本身就是大写,但这种方式会丢失原数据的大小写信息,建议谨慎选择。 - 处理字符串转换时,一定要考虑空值情况,比如用
originalName?.ToUpper() ?? string.Empty来避免空引用异常,让代码更健壮。
内容的提问来源于stack exchange,提问作者Fabio Ramos
相关产品推荐
相关产品推荐

