使用 EPPlus 导入 Excel 文件时处理空单元格

Dealing with empty cells when importing Excel file using EPPlus

我想使用 EPPLUS 将数据从 Excel 导入数据库。从这里我得到了代码:https://www.paragon-inc.com/resources/blogs-posts/easy_excel_interaction_pt6

问题是有时 excel 中的单元格是空的。如果单元格为空,那么我会收到错误消息:NullReferenceException,并且我的应用程序会停止。我认为好的解决方案是在没有引用的情况下将 null 值分配给特定变量,例如if(LAST_NAME returns NullReferenceException then LAST_NAME = null) - 但我不知道如何在代码中执行此操作。

var newRecord = new DB_USER
{
    ID = Int32.Parse(worksheet.Cells[idColumn + row].Value.ToString()),
    FIRST_NAME = worksheet.Cells[firstNameColumn + row].Value.ToString(),
    LAST_NAME = worksheet.Cells[lastNameColumn + row].Value.ToString() //If this value has NullReferenceException then assign null or ""
};

如果您使用的是最新的 C# 版本 (6.0),那么您可以使用 null propagation operator:

LAST_NAME = worksheet?.Cells[lastNameColumn + row]?.Value?.ToString()

我觉得分配一个空字符串很好,即 string.Empty 用于空单元格。如果你没问题,你可以这样说:

var newRecord = new DB_USER
      {
           ID = Int32.Parse(worksheet.Cells[idColumn + row].Value.ToString()),
           FIRST_NAME = worksheet.Cells[firstNameColumn + row].Value.ToString(),
           LAST_NAME = worksheet.Cells[lastNameColumn + row].Value ?? string.Empty).ToString() //for a null value assign a empty string else the string value
       };

更简洁的方法是扩展方法:

public static string ToNullSafeString(this object obj)
{
    return (obj ?? string.Empty).ToString();
}

并将其用作:

LAST_NAME = worksheet.Cells[lastNameColumn + row].Value.ToNullSafeString();

仍然,如果您希望 return 一个 null 而不是 string.Empty,那么对上面的 ToNullSafeString 扩展方法稍作修改就可以了。