引用:C# 开源组件--NPOI读取Excel单元格中的公式值_51CTO博客_c# excel npoid
当判定单元格类型为CellType.FORMULA时使用转换函数eva.Evaluate(row.GetCell(j)).StringValue后获取;(也分为两种情况通过eva.Evaluate(row.GetCell(j)).CellType再次区分)
eg:
switch (row.GetCell(j).CellType)
{
case CellType.NUMERIC:
if (HSSFDateUtil.IsCellDateFormatted(row.GetCell(j)))//日期类型
{
itemArray[j] = row.GetCell(j).DateCellValue.ToString("yyyy-MM-dd");
}
else//其他数字类型
{
itemArray[j] = row.GetCell(j).NumericCellValue;
}
break;
case CellType.BLANK:
itemArray[j] = string.Empty;
break;
case CellType.FORMULA: //此处是处理公式数据,获取公式执行后的值
if (Path.GetExtension(strFileName).ToLower().Trim() == ".xlsx")
{
XSSFFormulaEvaluator eva = new XSSFFormulaEvaluator(hssfworkbook);
if (eva.Evaluate(row.GetCell(j)).CellType == CellType.NUMERIC)
{
itemArray[j] = eva.Evaluate(row.GetCell(j)).NumberValue;
}
else
{
itemArray[j] = eva.Evaluate(row.GetCell(j)).StringValue;
}
}
else
{
HSSFFormulaEvaluator eva = new HSSFFormulaEvaluator(hssfworkbook);
if (eva.Evaluate(row.GetCell(j)).CellType == CellType.NUMERIC)
{
itemArray[j] = eva.Evaluate(row.GetCell(j)).NumberValue;
}
else
{
itemArray[j] = eva.Evaluate(row.GetCell(j)).StringValue;
}
}
break;
default:
itemArray[j] = row.GetCell(j).StringCellValue;
break;
}