使用NPOI,我如何返回一个单元格值,因为它已被格式化为Excel?

使用NPOI ,是否有格式化单元格值的可能性(特别是数值和date值),因为它已被格式化为Excel ?

如果不是什么将是实施它的最好方法? 我想到一个格式string从Excel格式转换为C#格式的转换器?

以下示例假定Excel格式string和C#格式string是相同的。 所以它适用于一些基本的格式字符,如:“#,## 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 [...] 

发现build立在可能性的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); 
 private static CellValue EvaluateFormulaCellValue(XSSFWorkbook wb, ICell cell) { WorkbookEvaluator _bookEvaluator = null; _bookEvaluator = new WorkbookEvaluator(XSSFEvaluationWorkbook.Create(wb), null, null); // XSSFFormulaEvaluator.EvaluateAllFormulaCells(wb); ValueEval eval = _bookEvaluator.Evaluate(new XSSFEvaluationCell((XSSFCell)cell)); if (eval is NumberEval) { NumberEval ne = (NumberEval)eval; return new NPOI.SS.UserModel.CellValue(ne.NumberValue); } if (eval is BoolEval) { BoolEval be = (BoolEval)eval; return NPOI.SS.UserModel.CellValue.ValueOf(be.BooleanValue); } if (eval is StringEval) { StringEval ne = (StringEval)eval; return new NPOI.SS.UserModel.CellValue(ne.StringValue); } if (eval is ErrorEval) { return NPOI.SS.UserModel.CellValue.GetError(((ErrorEval)eval).ErrorCode); } throw new InvalidOperationException("Unexpected eval class (" + eval.GetType().Name + ")"); }