这里主要解决2个问题;
第一:Cannot get a numeric value from a error cell报错,也就是excel的框里是{null},然后我们取值的时候报的错。
这种情况一般用celltype==Error来规避。
第二:计算框,如:《=(J8*K8+L8)*M8 》直接获取值会得到“0”,通过如下红色代码可以规避;
HSSFFormulaEvaluator 接口的方法 EvaluateInCell()计算公式单元格的结果保存下来,但不改变公式;
这样就能获取计算后的值了。
今天遇到一个比较坑的情况,就是第二种里面包含第一种的异常
wk = new HSSFWorkbook(stream);
int Sheetcount = wk.NumberOfSheets;
HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(wk);
var cell = row.GetCell(j);
string value = "";if (cell != null)//读取该行的第j列数据{switch (cell.CellType){case CellType.Blank: //空数据类型处理value = "0";break;case CellType.String: //字符串类型value = cell.StringCellValue;break;case CellType.Numeric: //数字类型value = cell.NumericCellValue.ToString();break;case CellType.Formula:switch (row.GetCell(j).CachedFormulaResultType){case CellType.String:string strFORMULA = row.GetCell(j).StringCellValue;if (strFORMULA != null && strFORMULA.Length > 0){value = strFORMULA.ToString();}else{value = null;}break;case CellType.Numeric:cell = e.EvaluateInCell(cell);//下面这里出现了个问题,坑啊!cell原类型是Formula,CachedFormulaResultType后是Numeric,因为是计算框,EvaluateInCell后才露出真面目:Error!!!所以需要加下面的判断if (cell.CellType != CellType.Error)
value = Convert.ToString(row.GetCell(j).NumericCellValue);
else
value = "0";break;case CellType.Boolean:value = Convert.ToString(row.GetCell(j).BooleanCellValue);break;case CellType.Error:value = ErrorEval.GetText(row.GetCell(j).ErrorCellValue);break;default:value = "";break;}break;default:value = "0";break;}}elsevalue = "0";
NPIO读取Excel,Cannot get a numeric value from a error cell和计算框
最新推荐文章于 2023-05-03 16:43:40 发布