c# – 使用NPOI,如何返回由Excel格式化的单元格值?

使用
NPOI,是否有可能格式化单元格值(特别是数字和日期值),因为它已经是
formatted by Excel

如果不是最好的实现方式是什么?我想到了从Excel格式字符串到C#格式字符串的格式字符串转换器?

以下示例假定Excel-formatstring和C#-formatstring相同.所以它适用于一些基本的格式字符串,如:“#,## 0.00”

using NPOI.SS.UserModel;

ICell cell = workbook.GetSheet("table1").GetRow(0).GetCell(0);
string value = null;

if(cell.CellType == CellType.String) {
    value = cell.StringCellValue;
} else if(cell.CellType == CellType.Numeric) {
    string formatString = cell.CellStyle.GetDataFormatString();

    if(DateUtil.IsCellDateFormatted(cell)) {
        value = cell.DateCellValue.ToString(formatString);
    } else {
        value = cell.NumericCellValue.ToString(formatString);
    }
} else [...]

最佳答案 发现NPOI内置的可能性.然而,诸如“1983年9月18日星期日”之类的某些格式被评估为“EEEE,1983年9月18日”.

using NPOI.SS.UserModel;

DataFormatter dataFormatter = new DataFormatter(CultureInfo.CurrentCulture);
ICell cell = workbook.GetSheet("table1").GetRow(0).GetCell(0);

string value = dataFormatter.FormatCellValue(cell);
点赞